【发布时间】:2021-07-22 02:29:34
【问题描述】:
我的目标是遍历 JSON 响应,获取两个值,并构建 API 调用以将信息加载到 POST 以创建我正在构建的策略。
首先,我尝试从 JSON 响应中获取两个值,以分配为变量来构建 POST 调用,这将是第二步。由于分配了每个不同的“id”和“name”键,我想构建一个 JSON 有效负载并一次发送一个 POST 调用。键“id”和“name”在响应负载中出现多次,我在捕获这两个键时遇到问题。
JSON 响应
data = {
"data":[
{
"id":"02caf2be-3245-4d3d",
"name":"ORA-FIN-ACTG",
"description":"Oracle",
"links":{
"web":"https://com/",
"api":"https://com/"
}
},
{
"id":"03af2f46-fad6-41a1",
"name":"NBCMAINFRAME",
"description":"Network",
"links":{
"web":"https://com/",
"api":"https://com/"
}
},
{
"id":"0649628b-0e3b-48df",
"name":"CAMS",
"description":"Customer",
"links":{
"web":"https://com/",
"api":"https://com/"
}
},
{
"id":"069d4bcf-3e50-4105",
"name":"SHAREPOINTSITES",
"description":"Sharepoint",
"links":{
"web":"https://com/",
"api":"https://com/"
}
}
],
"took":0.013,
"requestId":"1f364470"
}
我尝试了各种“for 循环”来获取数据。这是以下循环之一:
data = json.loads(data)
data[0]['data'][0]['name']
for item in range(len(data)):
print(data[item]['data'][0]['name'])
我也试过把它当作字典来读:
for data_dict in data:
for key, value in data_dict.items():
team.append(key)
id.append(value)
print('name = ', team)
print('id = ', id)
我还收到 KeyError 和 TypeError:JSON 对象必须是 str、bytes 或 bytearray,而不是 'dict'。
感谢任何帮助。
仅供参考,这是我想用“name”和“id”值填充的有效负载:
data= {
"type":"alert",
"description":"policy",
"enabled":"true",
"filter":{
"type":"match-any-condition",
"conditions":[
{
"field":"extra-properties",
"key":"alertOwner",
"operation":"equals",
"expectedValue":name
}
]
},
"ignoreOriginalResponders": "true",
"ignoreOriginalTags": "true",
"continue": "true",
"name": str(name) + " Policy",
"message":"{{message}}",
"responders":[{"type":"team","id":id}],
"alias":"{{alias}}",
"tags":["{{tags}}"],
"alertDescription":"{{description}}"
}
【问题讨论】:
-
你能解释一下这部分代码吗:
"{} : {}".这是在字典中进入下一个层次吗? -
不,这些只是用于漂亮打印输出的占位符。
item["id"]和item["name"]将为您提供您的价值观。我使用inbuilt string format method 打印了它
标签: json python-3.x dictionary key httpresponse