[英]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.