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

Python如何根据传入的键路径与值动态修改复杂嵌套JSON的对应字段

实现任意深度JSON结构的动态赋值函数

核心实现逻辑分为两步:

  1. 解析传入的字段路径,把items[0].colour这类字符串拆分为逐层访问的键列表['items', 0, 'colour']
  2. 遍历键列表逐层深入嵌套结构,到最后一层时完成赋值

完整实现代码

def set_json_value(json_dict, path, value):
    # 解析路径为逐层访问的键列表
    keys = []
    # 先按点拆分路径为多个片段
    for part in path.split('.'):
        # 处理带数组索引的片段,比如 items[0]
        if '[' in part and ']' in part:
            key, idx_str = part.split('[', 1)
            idx = int(idx_str.rstrip(']'))
            keys.append(key)
            keys.append(idx)
        else:
            keys.append(part)
    
    # 遍历走到倒数第二层嵌套结构
    current = json_dict
    for key in keys[:-1]:
        current = current[key]
    
    # 给最后一级键赋值
    current[keys[-1]] = value

测试示例

# 对应示例的JSON字典
sample_dict = {
  "id": "foo",
  "items": [
    {
      "id": "aaa",
      "colour": "blue"
    },
    {
      "id": "bbb",
      "colour": "red"
    }
  ]
}

# 测试调用1:修改数组内对象的属性
set_json_value(sample_dict, 'items[0].colour', 'green')
print(sample_dict['items'][0]['colour']) # 输出 green

# 测试调用2:修改顶层属性
set_json_value(sample_dict, 'id', 'bar')
print(sample_dict['id']) # 输出 bar

补充说明

上述基础实现和Python原生索引逻辑保持一致,要求路径的前序节点必须存在,否则会抛出KeyError/IndexError。如果需要支持路径不存在时自动创建中间的字典、列表结构,可以在遍历逐层访问的环节增加判断,根据下一级键的类型(字符串对应字典、数字对应列表)自动生成对应结构即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:15:06