json - 尝试从 JSON 响应中的列表中获取值
问题描述
我的目标是遍历 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}}"
}
解决方案
您提供的 JSON 响应已经是一个字典,因此无需使用json.loads
它。多项目列表实际上嵌套在data
键下。因此,您可以像这样简单地遍历项目数组:
for item in data["data"]:
print("{} : {}".format(item["id"],item["name"]))
这是输出:
02caf2be-3245-4d3d : ORA-FIN-ACTG
03af2f46-fad6-41a1 : NBCMAINFRAME
0649628b-0e3b-48df : CAMS
069d4bcf-3e50-4105 : SHAREPOINTSITE
推荐阅读
- docker - 即使 docker-compose up 成功也无法连接到 docker 端点
- sql-server - 如何将 SQL Server 触发器转换为 Oracle 触发器?
- javascript - 怎么样 | 和 + 把字符串变成数字的诀窍?
- heroku - 基础 grails 3.3.8 应用程序取消了 heroku 内存限制
- hadoop - 如何使用 flink 将增量数据写入 hive
- java - 我怎样才能使字符串的所有组合具有不同的“r”数字?
- amazon-web-services - AWS:将其重新分配给另一个实例后无法连接到弹性 IP
- android - android活动中的浏览按钮
- excel - HLLAPI 函数 99 未按预期工作
- amazon-s3 - 未设置 AWS PHP SDK ContentType