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

用Python从嵌套JSON中提取键值对为元组列表的方法

提取嵌套JSON中的扁平化键值对

你可以通过一次递归遍历同时生成带层级路径的键和对应的值,既避免分开提取键值可能出现的顺序不匹配问题,也让代码更简洁高效。

实现代码

json_example = {'name': 'TheDude',
 'age': '19',
 'hobbies': {
         'love': 'eating',
         'hate': 'reading',
         'like': [
                 {'outdoor': {
                         'teamsport': 'soccer',
                        }
                 }
                 ]
        }
  }

def flatten_json(data, prefix=''):
    result = []
    if isinstance(data, dict):
        # 遍历字典键值对,拼接层级键前缀
        for key, value in data.items():
            new_prefix = f"{prefix}_{key}" if prefix else key
            result.extend(flatten_json(value, new_prefix))
    elif isinstance(data, list):
        # 遍历列表元素,继承上层键前缀
        for item in data:
            result.extend(flatten_json(item, prefix))
    else:
        # 遇到最终值,生成键值元组
        result.append((prefix, data))
    return result

# 测试调用
output = flatten_json(json_example)
print(output)

输出结果

[('name', 'TheDude'), ('age', '19'), ('hobbies_love', 'eating'), ('hobbies_hate', 'reading'), ('hobbies_like_outdoor_teamsport', 'soccer')]

代码说明

  • 处理字典时,将当前键与上层前缀用下划线拼接,形成完整的层级键路径;
  • 处理列表时,直接递归遍历每个元素,无需修改前缀(列表元素无独立键,沿用上层路径);
  • 遇到非容器类型(字符串、数字等)时,直接将当前前缀和值组成元组加入结果列表。

对比原方法的优势

你之前分开提取键和值的方式,可能因嵌套列表导致键值顺序无法精准匹配;而一次遍历的递归方法能保证每个键与值严格对应,同时代码结构更简洁,无需维护两个独立函数。

内容的提问来源于stack exchange,提问作者matt.aurelio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:50:24