Python中如何从嵌套JSON保留单个Assignment并维持原结构?
解决嵌套JSON保留单个Assignment条目问题
问题场景
现有嵌套JSON结构,需要保留外层tasks及Assignments层级的同时,仅保留单个Assignment条目。原代码因错误覆盖整个数据结构,导致丢失外层层级。
错误原因分析
原代码中data = data['tasks'][0]['Assignments'].pop(0)直接将data变量替换为弹出的单个员工对象,完全丢弃了原本的完整JSON层级结构,因此输出仅为单个员工数据。
解决方案
方案1:保留第一个Assignment条目
直接修改原结构中的Assignments数组,将其替换为仅包含第一个元素的新数组,保留外层所有层级:
import json a = ''' { "tasks": [ { "Assignments": [ { "EmployeeId": "1000", "TotalWork": 1, "RemainingWork": 1 }, { "EmployeeId": "3L2kVk00x", "TotalWork": 1, "RemainingWork": 1 }, { "EmployeeId": "3L2kVk00y", "TotalWork": 1, "RemainingWork": 1 } ], "TaskId": "487058", "Project": 100 } ] } ''' data = json.loads(a) # 替换第一个task的Assignments数组为仅包含第一个元素的数组 data['tasks'][0]['Assignments'] = [data['tasks'][0]['Assignments'][0]] print(json.dumps(data, indent=2))
执行后输出符合预期的完整结构:
{ "tasks": [ { "Assignments": [ { "EmployeeId": "1000", "TotalWork": 1, "RemainingWork": 1 } ], "TaskId": "487058", "Project": 100 } ] }
方案2:按EmployeeId筛选指定条目
如果需要保留特定EmployeeId的条目而非固定第一个,可使用列表推导式筛选:
import json a = ''' { "tasks": [ { "Assignments": [ { "EmployeeId": "1000", "TotalWork": 1, "RemainingWork": 1 }, { "EmployeeId": "3L2kVk00x", "TotalWork": 1, "RemainingWork": 1 }, { "EmployeeId": "3L2kVk00y", "TotalWork": 1, "RemainingWork": 1 } ], "TaskId": "487058", "Project": 100 } ] } ''' data = json.loads(a) # 筛选EmployeeId为"1000"的Assignment target_assignments = [assign for assign in data['tasks'][0]['Assignments'] if assign['EmployeeId'] == '1000'] data['tasks'][0]['Assignments'] = target_assignments print(json.dumps(data, indent=2))
这种方式更灵活,适用于需要精准保留特定条目场景。
内容的提问来源于stack exchange,提问作者LuiTe
相关产品推荐
相关产品推荐

