用Python解析复杂的JSON
我对JSON和Python非常陌生,并且尝试使用GET请求得到的复杂JSON输出。这是JSON输出的一个示例(这只是其中的一小部分,但原理是一样的): 我试图找到打印单个值的最佳方法。例如,我需要“connectivityStatus”的值。任何帮助都将不胜感激 我能够解析简单的JSON输出。我已成功获取整个内部集树:用Python解析复杂的JSON,python,json,parsing,Python,Json,Parsing,我对JSON和Python非常陌生,并且尝试使用GET请求得到的复杂JSON输出。这是JSON输出的一个示例(这只是其中的一小部分,但原理是一样的): 我试图找到打印单个值的最佳方法。例如,我需要“connectivityStatus”的值。任何帮助都将不胜感激 我能够解析简单的JSON输出。我已成功获取整个内部集树: x = requests.get('website.com) d = x.json() print (d['innerSet']) 但是,我不能按较低的键。例如,获取“clu
x = requests.get('website.com)
d = x.json() print (d['innerSet'])
但是,我不能按较低的键。例如,获取“clusterUID”中“id”键的值:
导致以下错误:TypeError:列表索引必须是整数,而不是str
问候,,
雅基尔。您可以这样做:
import simplejson as json
data = json.loads(s)
print data['innerSet'][0]['rpasState'][0]['remoteRPAsDataLinkStatus'][0]['connectivityStatus']
对于复杂的JSON,您可以像Xpath一样使用它,但使用dict 根据您的json,您可以将其解析为:
print(list(dpath.util.search(t, '**/connectivityStatus', yielded=True)))
print(dpath.util.get(t, '/innerSet/0/rpasState/0/remoteRPAsDataLinkStatus/0/connectivityStatus'))
[('innerSet/0/rpasState/0/remoteRPAsDataLinkStatus/0/connectivityStatus', 'OK')]
OK
看看
json
模块…在谷歌上写:pythonjson
你会得到你需要的一切。谢谢!成功了。您能否解释何时(以及为什么)需要包含这些“[0]”的路径?我希望能够在JSON解析的其余部分实现它。再次感谢!之所以存在[0]
,是因为您访问了列表的第一个元素。“innerSet”后面的方括号“:[指定innerSet是一个列表,类似于rpasState,remoteRPAsDataLinkStatus。为什么使用json库会引发错误?应该必须使用simplejson吗?谢谢您,也可以。不过,第一个建议给出了所有错误它可以找到“connectivityStatus”键(有意义)。但是这个模块的用法很简单明了。谢谢。这种方法适合复杂的JSON,比如REST响应。
import simplejson as json
data = json.loads(s)
print data['innerSet'][0]['rpasState'][0]['remoteRPAsDataLinkStatus'][0]['connectivityStatus']
print(list(dpath.util.search(t, '**/connectivityStatus', yielded=True)))
print(dpath.util.get(t, '/innerSet/0/rpasState/0/remoteRPAsDataLinkStatus/0/connectivityStatus'))
[('innerSet/0/rpasState/0/remoteRPAsDataLinkStatus/0/connectivityStatus', 'OK')]
OK