Python如何根据传入的键路径与值动态修改复杂嵌套JSON的对应字段
实现任意深度JSON结构的动态赋值函数
核心实现逻辑分为两步:
- 解析传入的字段路径,把
items[0].colour这类字符串拆分为逐层访问的键列表['items', 0, 'colour'] - 遍历键列表逐层深入嵌套结构,到最后一层时完成赋值
完整实现代码
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
相关产品推荐
相关产品推荐

