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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:43:33