如何使用Python解码JSON

时间:2010-02-25 05:51:01

标签: python json

我从reddit.com获得了我的JSON,基本上something like this.我已经做了很多阅读,但我真的不明白如何从这个JSON中获取我想要的信息(我想要的)故事链接列表)。我知道我可以将JSON“解码”成字典,但是我是否需要在整个JSON中重复以获得我需要的东西?

提前致谢。

4 个答案:

答案 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)