我是JSON和Python的新手,并尝试使用我在GET请求中获得的复杂JSON输出。这是JSON输出的一个例子(这只是它的一小部分,但原理是相同的):
{
"innerSet": [
{
"clusterUID": {
"id": 3585057579401361143
},
"rpasState": [
{
"rpaUID": {
"clusterUID": {
"id": 3585057579401361143
},
"rpaNumber": 1
},
"status": "OK",
"repositoryConnectivityStatus": {
"accessStatus": "OK",
"multipathingProblems": false
},
"remoteRPAsDataLinkStatus": [
{
"JsonSubType": "RPAConnectivityStatus",
"clusterUID": {
"id": 2671811049708195677
},
"entityType": "RPA",
"connectivityStatus": "OK",
"rpaUID": {
"clusterUID": {
"id": 2671811049708195677
},
"rpaNumber": 1
}
}
],
}
]
}
]
}
我试图找到打印单个值的最佳方法。例如,我需要" connectivityStatus"的值。任何帮助将不胜感激。
我能够解析简单的JSON输出。我设法获得整个innerSet树:
x = requests.get('website.com)
d = x.json() print (d['innerSet'])
但是,我无法使用低位键。例如,获取" id"的值键入" clusterUID":
print (d['innerSet']['clusterUID']['id'])
导致以下错误:TypeError:list indices必须是整数,而不是str
此致 亚基尔。
答案 0 :(得分:1)
你可以这样做:
import simplejson as json
data = json.loads(s)
print data['innerSet'][0]['rpasState'][0]['remoteRPAsDataLinkStatus'][0]['connectivityStatus']
答案 1 :(得分:1)
对于复杂的JSON,您可以使用dpath,就像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