使用Python

时间:2015-08-31 12:56:20

标签: python json parsing

我是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

此致 亚基尔。

2 个答案:

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