我从reddit.com获得了我的JSON,基本上something like this.我已经做了很多阅读,但我真的不明白如何从这个JSON中获取我想要的信息(我想要的)故事链接列表)。我知道我可以将JSON“解码”成字典,但是我是否需要在整个JSON中重复以获得我需要的东西?
提前致谢。
答案 0 :(得分:23)
如果您使用的是Python 2.6或更高版本,请使用内置的json
库。否则,请使用具有完全相同接口的simplejson
。
您可以自适应地执行此操作,而无需使用以下代码自行检查Python版本:
try:
import json
except ImportError:
import simplejson as json
然后,使用json.loads()
或其他任何内容。
答案 1 :(得分:13)
import urllib2
import json
u = urllib2.urlopen('http://www.reddit.com/.json')
print json.load(u)
u.close()
答案 2 :(得分:0)
我假设您将数据解析为字典,然后从中提取相关位。
您可以使用适当的python library
在python中解析json答案 3 :(得分:0)
有两种方法可以用Python“解码”json, 后你用json库将它解析为dicts和list。
首先,通过索引访问它,如下所示:
url_list = [t['entries'][0]['url'] for t in data['windows'][0]['tabs']]
或者,您可以迭代其树结构。下面的示例函数不是通用的,它只是说明在解析树时需要以不同的方式考虑JSON的三种不同类型的“节点”。密钥的“值”可能是数据,没有密钥的子节点列表,或者基本上是新JSON对象的字典。您不能像通常使用常规树一样检查每个节点的名称,数据和子节点。
def depthFirstSearch(self, jsonobj, target, parentKey=None):
if isinstance(jsonobj, dict):
for key, value in jsonobj.items():
if isinstance(value, (dict, list)):
self.depthFirstSearch(value, target, key)
else: # "data" node
if key == target and parentKey not in self.parentsToExclude:
self.results.append(value)
self.parents[parentKey] += 1
if isinstance(jsonobj, list):
for value in jsonobj:
#lists don't have keys, pass along key from last dict
self.depthFirstSearch(value, target, parentKey)