繁体   English   中英

从嵌套的 JSON 数据中获取特定值

[英]Get certain value from nested JSON data

我使用以下代码来获取日志条目,例如:

2020-01-11 17:47:16 [root] 信息:与电子邮件hunter@tomorrowworld.com 的联系已经存在。

我想知道.get("errors", {})[0].get('message')是否是解决这个问题的正确方法?

if r.status_code != 200:
    if r.json().get("error") == "CONTACT_EXISTS":
        logging.info(r.json().get("errors", {})[0].get('message'))

完整的 JSON 响应:

{
    "category": "OBJECT_ALREADY_EXISTS",
    "correlationId": "4a3bf3a8-72c4-47ed-ac27-520ca0bac128",
    "error": "CONTACT_EXISTS",
    "errors": [
        {
            "in": "email",
            "message": "A contact with email hunter@website.org already exists."
        }
    ],
    "identityProfile": {
        "identity": [
            {
                "isPrimary": true,
                "timestamp": 1578760232183,
                "type": "EMAIL",
                "value": "hunter@website.org"
            },
            {
                "timestamp": 1578760232205,
                "type": "LEAD_GUID",
                "value": "79b14936-1215-454a-939d-42071b036bfb"
            }
        ],
        "isContact": true,
        "linkedVid": [],
        "savedAtTimestamp": 1578760232210,
        "vid": 125401
    },
    "message": "Contact already exists",
    "requestId": "2243a2d1ddd19d466ea4b98ab5cf6d66",
    "status": "error"
}

您应该将[{}]作为默认errors值以避免IndexError

您也可以提取json()结果不解析响应内容两次:

if r.status_code != 200:
    content = r.json()
    if content.get("error") == "CONTACT_EXISTS":
        logging.info(content.get("errors", [{}])[0].get("message"))

在这个r.json().get("errors", {})[0].get('message')使用 get 方法没有多大意义。 特别是使用{}默认值。 如果没有errors元素并且您尝试从中索引第 0 个元素,则无论哪种方式都会出现错误。

如果您可以确定每个元素都存在,请使用正常索引r.json()["errors"][0]['message']如果您不能 - 在每个步骤中使用.get()

if r.status_code != 200:
    if r.json().get("error") == "CONTACT_EXISTS":
        default=[{'message':'key does not exit'}]
        logging.info(r.json().get("errors", default)[0].get('message'))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM