如何用Python解码JSON

20 投票
3 回答
30332 浏览
提问于 2025-04-15 19:42

我从reddit.com获取JSON数据,基本上是像这样的一些内容。 我读了很多资料,但我还是不太明白怎么从这个JSON中提取我想要的信息(我想要一个故事链接的列表)。我知道可以把JSON“解码”成一个字典,但我需要在整个JSON中反复查找才能得到我需要的东西吗?

提前谢谢你。

3 个回答

0

在Python中,有两种方法可以“解码”json,前提是你已经用json库把它解析成字典和列表。

第一种方法是通过索引来访问,就像这样:

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)
12

这段代码的意思是……

首先,它定义了一些变量,这些变量就像是用来存储信息的盒子。你可以把它们想象成一个个小抽屉,里面放着不同的东西。

接下来,代码会进行一些操作,比如计算、比较或者改变这些变量的值。这就像是在对这些抽屉里的东西进行整理、检查或者更新。

最后,代码可能会输出一些结果,告诉你这些操作的结果是什么。这就像是把整理好的东西拿出来展示给你看。

总的来说,这段代码就是在做一些简单的计算和处理,把信息从一个地方转移到另一个地方,或者把它们整理得更清楚。

import urllib2
import json

u = urllib2.urlopen('http://www.reddit.com/.json')
print json.load(u)
u.close()
23

如果你使用的是Python 2.6或更高版本,可以直接使用内置的json库。如果你用的是更早的版本,就要用simplejson,这个库的用法和内置的那个完全一样。

你可以用下面的代码来自动判断,不用自己去检查Python的版本:

try:
    import json
except ImportError:
    import simplejson as json

然后,根据需要使用json.loads()或者其他相关的函数。

撰写回答