如何用Python解码JSON
我从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()
或者其他相关的函数。