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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:57:03