首页 > 解决方案 > 解析字典中的字典列表以从每个字典中检索特定键的值

问题描述

我得到一个 JSON 响应,并使用json.loads(). 所以字典看起来像这样:

{u'body': u'[{"id":"1","entity":"zone","status":"PROCESSING","url":null,"createdOn":"2019-10-11T05:49:11Z"},{"id":"2","entity":"floor","status":"FAILED","url":null,"createdOn":"2019-10-11T05:49:15Z"},{"id":"3","entityType":"apartment","status":"SUCCESS","url":null,"createdOn":"2019-10-11T05:49:18Z"}]',u'isBase64Encoded': False, u'statusCode': 200}

我将其命名为testStatusList. 我想检索"status"里面每个字典的键值"body"。我能够"body"通过给予来检索body = testStatusList['body']. 现在,字典看起来像:

[
    {
        "id": "1",
        "entityType": "zone",
        "status": "PROCESSING",
        "url": null,
        "createdOn": "2019-03-07T12:47:10Z"
    },
    {
        "id": "2",
        "entityType": "floor",
        "status": "FAILED",
        "url": null,
        "createdOn": "2019-08-19T16:46:13Z"
    },
    {
        "id": "3",
        "entityType": "apartment",
        "status": "SUCCESS",
        "url": null,
        "createdOn": "2019-08-19T16:46:13Z"
    }
]

我尝试了这个解决方案 [ Parsing a dictionary to retrieve a key in Python 3.6

testStatusList= json.loads(status_response['Payload'].read())
    body = testStatusList['body']
    status =[]
    for b in body:
       for k,v in b.items():
           if k == 'status':
               status.append(v) 

但我不断得到AttributeError: 'unicode' object has no attribute 'items'。是否有不同的方法来获取 unicode 对象的项目?

所以我基本上想检索所有状态,即处理中、失败和成功,这样当特定“id”出现故障时,我可以设置一个“if”条件来显示适当的消息。我对我的方法非常不确定,因为我对 Python 完全陌生。任何帮助将不胜感激谢谢!

标签: pythonjsondictionary

解决方案


body 仍然是顶部 blob 中的(unicode)字符串。json.loads在该字符串上再次使用:

body = """[
    {
        "id": "1",
        "entityType": "zone",
        "status": "PROCESSING",
        "url": null,
        "createdOn": "2019-03-07T12:47:10Z"
    },
    {
        "id": "2",
        "entityType": "floor",
        "status": "FAILED",
        "url": null,
        "createdOn": "2019-08-19T16:46:13Z"
    },
    {
        "id": "3",
        "entityType": "apartment",
        "status": "SUCCESS",
        "url": null,
        "createdOn": "2019-08-19T16:46:13Z"
    }
]"""


import json
body = json.loads(body)
status =[]
for b in body:
   for k,v in b.items():
       if k == 'status':
           status.append(v) 
print(status)

结果:

['处理','失败','成功']


推荐阅读