用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
相关产品推荐
相关产品推荐

