使用Python访问JSON文档中包含列表嵌套的所有键并修改的实现方法
嵌套JSON全键遍历与修改方案
你现有代码仅遍历了JSON解析后的顶层字典,没有处理值为列表、嵌套字典的场景,所以无法获取深层的d、e、f、g等键。
实现思路
- 采用递归方式遍历所有节点,自动适配字典、列表两种复合类型
- 字典类型节点:遍历键值对,先输出当前键,再递归处理值对象
- 列表类型节点:遍历每个子元素,直接递归处理子元素(列表本身无键,无需输出)
- 基础类型节点(数字、字符串、布尔等):无需递归,直接处理值即可
完整可运行代码
#!/usr/bin/env python3 import json def traverse(node, modify_rule=None): if isinstance(node, dict): for key, value in node.items(): # 打印当前键 print(key) # 应用自定义修改规则 if modify_rule is not None: node[key] = modify_rule(key, value) # 递归处理值 traverse(value, modify_rule) elif isinstance(node, list): for item in node: traverse(item, modify_rule) if __name__ == "__main__": file = 'example.json' # 用with语句自动管理文件句柄,避免资源泄漏 with open(file, 'r', encoding='utf-8') as f: data = json.load(f) # 自定义修改规则示例:将键为g的值改为100,其余数值类型值加1 def my_modify(key, value): if key == 'g': return 100 if isinstance(value, (int, float)): return value + 1 return value # 执行遍历+修改 traverse(data, my_modify) # 验证修改结果 print("\n修改后的JSON内容:") print(json.dumps(data, indent=4, ensure_ascii=False)) # 若需要将修改结果写回文件,取消下方注释即可 # with open(file, 'w', encoding='utf-8') as f: # json.dump(data, f, indent=4, ensure_ascii=False)
运行效果
使用你提供的示例JSON运行代码,会依次输出全部键:a、b、c、d、e、f、g,同时按照自定义规则完成值修改。你可以根据实际需求调整my_modify函数里的修改逻辑,适配不同业务场景。
内容的提问来源于stack exchange,提问作者NetHead
相关产品推荐
相关产品推荐

