簡體   English   中英

使用Python解析JSON嵌套字典

[英]Parsing JSON nested Dictionary using Python

我在JSON中有以下嵌套字典。 如果我想獲得“id”,“self”,“name”,我應該如何使用Python程序解析它。

{
  "items": [
    {
      "id": "12345",
      "links": {
        "self": "https://www.google.com"
      },
      "name": "beast",
      "type": "Device"
    }
  ],
  "links": {
    "self": "https://www.google.com"
  },
  "paging": {
    "count": 1,
    "limit": 1,
    "offset": 0,
    "pages": 1
  }
}

要了解您的json是如何設置的,更容易將其分解。 讓我們看看第一個字典的鍵,並刪除值。

json = {"items": [], "links": {}}

你有一個包含兩個鍵和兩個值的字典。 您要查找的所有三個變量(id,self,name)都在第一個鍵“items”中。 讓我們深入了解。

json["items"] = [{'links': {'self': 'https://www.google.com'}, 'name': 'beast', 'type': 'Device', 'id': '12345'}]

現在您有一個包含字典的列表,其中包含您要查找的值,所以讓我們輸入包含下一個字典的列表的第一個也是唯一的值。

json["items"][0] = {'links': {'self': 'https://www.google.com'}, 'id': '12345', 'type': 'Device', 'name': 'beast'}

最后我們得到了值正在尋找的字典,因此您可以使用此代碼來查找名稱和ID。

json["items"][0]["name"] = beast

json["items"][0]["id"] = 12345

自變量隱藏了一個更深的字典,所以我們必須深入研究鏈接鍵。

json["items"][0]["links"]["self"] = http://google.com

現在你擁有了所有的價值觀,你只需要通過所有的列表和詞典來獲得你想要的價值。

它有助於編寫字典縮進,以更好地查看其嵌套:

mydict = {   
   'items': [
       {
           'id': '12345',
           'links': {'self': 'https://www.google.com'},
           'name': 'beast',
           'type': 'Device'
       }
    ],
    'links': {'self': 'https://www.google.com'},
    'paging': {
        'count': 1,
        'limit': 1,
        'offset': 0,
        'pages': 1
    }
}

現在你可以提取你想要的東西:

如果我想得到“id”,“self”,“name”,

print(mydict['items'][0]['id'])
print(mydict['items'][0]['links']['self'])
print(mydict['links']['self'])
print(mydict['items'][0]['name'])

您可以編寫一個函數,它將獲得您需要的值:

def dict_get(x,key,here=None):
    x = x.copy()
    if here is None: here = []
    if x.get(key):  
        here.append(x.get(key))
        x.pop(key)
    else:
        for i,j in x.items():
          if  isinstance(x[i],list): dict_get(x[i][0],key,here)
          if  isinstance(x[i],dict): dict_get(x[i],key,here)
    return here

dict_get(a,'id')
 ['12345']

dict_get(a,'self')
 ['https://www.google.com', 'https://www.google.com']

dict_get(a,'name')
['beast']

你也可以調用你想要的任何鍵:

數據

a = {
  "items": [
    {
      "id": "12345",
      "links": {
        "self": "https://www.google.com"
      },
      "name": "beast",
      "type": "Device"
    }
  ],
  "links": {
    "self": "https://www.google.com"
  },
  "paging": {
    "count": 1,
    "limit": 1,
    "offset": 0,
    "pages": 1
  }
}

你的json基本上包含里面的列表。 Jsons作為鍵值對進行訪問,並使用索引訪問列表。

json_object['items'][0]['id']

上面的陳述應該給你id。 我們正在訪問包含列表的關鍵項。 我們有[0]因為這個列表只包含一個元素(它也是一個鍵值對)。

對於self和name,遵循相同的方法

json_object['links']['self']
json_object['items'][0]['links']['self']
json_object['items'][0]['name']

訪問兩個不同的“self”之間的區別使得一個被包含在列表中,因此我們需要進入列表而另一個是帶有鍵'self'的字典,它位於字典'links'中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM