首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试从JSON响应中的列表中获取值

尝试从JSON响应中的列表中获取值
EN

Stack Overflow用户
提问于 2021-04-29 01:36:11
回答 1查看 22关注 0票数 0

我的目标是遍历JSON响应,获取两个值,并构建一个API调用来将信息加载到POST中,从而创建我正在构建的策略。

首先,我尝试从一个JSON响应中获取两个值,并将其赋值为变量以构建POST调用,这将是第二步。由于分配了不同的"id“和"name”键,因此我想构建一个JSON有效负载,并一次发送一个POST调用。键"id“和"name”在响应负载中多次出现,我在捕获这两个键时遇到了问题。

JSON响应

代码语言:javascript
运行
复制
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循环“来获取数据。下面是其中一个循环:

代码语言:javascript
运行
复制
data = json.loads(data)
data[0]['data'][0]['name']
for item in range(len(data)):
print(data[item]['data'][0]['name'])

我也试着把它当做字典来读:

代码语言:javascript
运行
复制
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对象必须是字符串、字节或字节数组,而不是'dict‘。

任何帮助都是非常感谢的。

仅供参考,这是我想用"name“和"id”值填充的有效负载:

代码语言:javascript
运行
复制
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}}"
    }
EN

Stack Overflow用户

回答已采纳

发布于 2021-04-29 01:57:02

您给出的JSON响应已经是一个字典,因此不需要使用json.loads。多项列表实际上嵌套在data键下。因此,您可以简单地迭代项目数组,如下所示:

代码语言:javascript
运行
复制
for item in data["data"]:
    print("{} : {}".format(item["id"],item["name"]))

这是输出:

代码语言:javascript
运行
复制
02caf2be-3245-4d3d : ORA-FIN-ACTG
03af2f46-fad6-41a1 : NBCMAINFRAME
0649628b-0e3b-48df : CAMS
069d4bcf-3e50-4105 : SHAREPOINTSITE
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67305209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档