嵌套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
相关产品推荐
相关产品推荐

