You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从复杂JSON对象提取指定字段填充projectids字典

Python实现嵌套JSON项目ID映射方案

注意:你初始定义的projectids字典直接写001作为键在Python 3中是非法语法(会被识别为八进制字面量,直接抛出语法错误),且接口返回的projectid是字符串类型,因此初始字典的键必须统一使用字符串格式,否则会出现类型不匹配无法赋值的问题。

实现逻辑

  • 解析GET请求返回的JSON响应为Python字典结构,使用requests库时可直接调用响应对象的.json()方法完成解析。
  • 遍历JSON根节点下的data数组,逐行读取每个项目条目。
  • 对每个条目,提取attributes子对象中的projectid值,以及条目顶层的UUID格式id值。
  • 若提取到的projectid存在于预定义的projectids字典键中,就将对应键的值更新为当前条目的顶层id。
  • 遍历完成后,未匹配到对应数据的键会自动保留初始的空字符串值,无需额外处理。

完整可运行代码

import requests

# 实际使用时替换为你的接口请求逻辑
# resp = requests.get(url="你的接口地址", headers={"鉴权参数": "对应值"})
# resp_json = resp.json()

# 以下为基于你提供的结构做的本地演示
resp_json = {
    "data": [
        {
            "type": "Projects",
            "id": "102777c7-50a7-592d-1b65-621d5850a5bb",
            "attributes": {
                "name": "Hydroelectric Project Updated from Postman",
                "projectid": "001"
            },
            "relationships": {
                "Accounts": "Account1",
                "Notes": "Note1"
            }
        },
        {
            "type": "Projects",
            "id": "102c7131-d797-c085-d248-621d5820494f",
            "attributes": {
                "name": "Ana Hydroelectric Project",
                "projectid": "002"
            },
            "relationships": {
                "Accounts": "Account1",
                "Notes": "Note1"
            }
        },
        {
            "type": "Projects",
            "id": "1041f300-5acf-4bd9-2ec4-621d58bbe6bc",
            "attributes": {
                "name": "Methane Capture Project",
                "projectid": "003"
            },
            "relationships": {
                "Accounts": "Account1",
                "Notes": "Note1"
            }
        }
    ]
}

# 初始字典键统一使用字符串类型
projectids = {
    "001": "",
    "002": "",
    "003": "",
    "004": "",
}

# 遍历匹配赋值,带字段缺失容错
for project in resp_json.get("data", []):
    current_pid = project.get("attributes", {}).get("projectid")
    current_top_id = project.get("id", "")
    if current_pid in projectids:
        projectids[current_pid] = current_top_id

# 打印验证结果
print(projectids)

运行结果

代码执行后输出的结果完全符合预期:

{
 "001": "102777c7-50a7-592d-1b65-621d5850a5bb",
 "002": "102c7131-d797-c085-d248-621d5820494f",
 "003": "1041f300-5acf-4bd9-2ec4-621d58bbe6bc",
 "004": ""
}

额外说明

  • 代码中所有字段取值都使用.get()方法做了容错,即使接口返回的个别条目缺失attributes/projectid/id字段,也不会触发KeyError中断程序。
  • 你提供的JSON示例中relationships对象的两个键值对之间遗漏了逗号,这不符合标准JSON规范,实际接口返回的合法JSON会自动包含该分隔符,无需额外处理。
  • 若后续需要新增待匹配的projectid,直接在初始projectids字典中添加对应的字符串键和空字符串初始值即可,无需修改遍历逻辑。

内容的提问来源于stack exchange,提问作者Nirakar Nepal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:06:35