使用Python解析JSON嵌套字典

2024-05-23 19:37:10 发布

您现在位置: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
  }
}

Tags: namehttpsself程序comidjson字典
3条回答

您可以编写一个函数,它将获得所需的值:

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是如何设置的,更容易分解它。让我们看看第一个字典的键,然后删除这些值。

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

自变量隐藏在一个更深的字典中,因此我们必须深入研究links键。

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
    }
}

现在您可以提取所需内容:

If I want to get "id", "self", "name",

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

相关问题 更多 >