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

嵌套JSON提取task_id与config出错:问题排查与修正

问题描述

从嵌套JSON中提取每个任务的task_id和config字段到新变量,当前Python代码仅提取了部分信息,输出包含空字典且缺失Task_Name_2的数据,需要完整提取三个任务的对应字段。


原JSON数据

{
  "project": {
    "tasks": {
      "Task_Name_1": {
        "task_id": "task_001",
        "config": {"param1": "val1", "param2": "val2"},
        "other_field": "ignore"
      },
      "Task_Name_2": {
        "task_id": "task_002",
        "config": {"paramA": "valA", "paramB": "valB"},
        "other_field": "ignore"
      },
      "Task_Name_3": {
        "task_id": "task_003",
        "config": {"paramX": "valX", "paramY": "valY"},
        "other_field": "ignore"
      }
    }
  }
}

错误的提取代码

import json

# 假设加载JSON数据到data变量
with open('tasks.json', 'r') as f:
    data = json.load(f)

extracted = []
for task in data['project']['tasks']:
    extracted.append({
        'task_id': task.get('task_id'),
        'config': task.get('config')
    })

print(extracted)

错误输出

[
    {},
    {},
    {}
]
# 或仅显示部分任务,缺失Task_Name_2相关数据

期望输出

[
    {
        "task_id": "task_001",
        "config": {"param1": "val1", "param2": "val2"}
    },
    {
        "task_id": "task_002",
        "config": {"paramA": "valA", "paramB": "valB"}
    },
    {
        "task_id": "task_003",
        "config": {"paramX": "valX", "paramY": "valY"}
    }
]

问题分析

直接遍历data['project']['tasks']时,拿到的是任务的键名(比如"Task_Name_1"),而非任务的字典对象,调用task.get()自然无法获取task_id和config,导致生成空字典。

修正后的代码

方法1:仅提取task_id和config

直接遍历tasks字典的values()集合,获取每个任务的完整数据:

import json

with open('tasks.json', 'r') as f:
    data = json.load(f)

extracted = []
for task_data in data['project']['tasks'].values():
    extracted.append({
        'task_id': task_data['task_id'],
        'config': task_data['config']
    })

print(json.dumps(extracted, indent=2))

方法2:保留任务名称(可选)

如果需要同时保留任务名称,可使用items()遍历键值对:

import json

with open('tasks.json', 'r') as f:
    data = json.load(f)

extracted = []
for task_name, task_data in data['project']['tasks'].items():
    extracted.append({
        'task_name': task_name,
        'task_id': task_data['task_id'],
        'config': task_data['config']
    })

print(json.dumps(extracted, indent=2))

验证结果

运行修正后的代码,会输出符合预期的完整任务数据,包含三个任务的task_id和config字段,无空字典或缺失数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:39:24