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

如何从任意JSON生成含父属性值重复的扁平值列表

实现任意嵌套JSON的全路径值扁平化输出

核心逻辑

用递归遍历JSON的每个节点,维护一个前缀列表记录当前节点的所有父级值。遇到原子值(字符串、数字、布尔、null)时,将前缀列表与当前值拼接后输出一行;遇到对象或数组时,继续递归遍历其内部元素,确保所有嵌套层级的原子值都能被提取并带上完整的父级值前缀。

Python 实现代码

def flatten_json_values(data, prefix=None):
    if prefix is None:
        prefix = []
    # 处理原子值:字符串、数字、布尔、null
    if isinstance(data, (str, int, float, bool)) or data is None:
        print(' '.join(map(str, prefix + [data])))
        return
    # 处理数组:遍历每个元素,沿用当前前缀递归
    elif isinstance(data, list):
        for item in data:
            flatten_json_values(item, prefix.copy())
    # 处理对象:遍历所有属性值,沿用当前前缀递归(忽略键)
    elif isinstance(data, dict):
        for value in data.values():
            flatten_json_values(value, prefix.copy())

使用示例

假设输入JSON文件input.json内容如下:

{
  "department": "engineering",
  "employees": [
    {
      "name": "Alice",
      "role": "developer",
      "is_fulltime": true,
      "phone": null
    },
    {
      "name": "Bob",
      "role": "designer",
      "is_fulltime": false,
      "phone": "555-1234"
    }
  ]
}

调用代码提取值:

import json

# 加载JSON数据
with open('input.json', 'r') as f:
    json_data = json.load(f)

# 执行扁平化输出
flatten_json_values(json_data)

输出结果:

engineering
engineering Alice
engineering developer
engineering True
engineering None
engineering Bob
engineering designer
engineering False
engineering 555-1234

自定义调整

如果需要数组元素之间传递前缀(比如数组["a", "b", {"c": "d"}]要输出a、a b、a b d),只需修改数组处理逻辑:

elif isinstance(data, list):
    current_prefix = prefix.copy()
    for item in data:
        if isinstance(item, (str, int, float, bool)) or item is None:
            # 原子值直接输出并加入前缀
            print(' '.join(map(str, current_prefix + [item])))
            current_prefix.append(item)
        else:
            # 嵌套结构沿用当前前缀递归
            flatten_json_values(item, current_prefix.copy())

特性说明

  • 支持任意深度的嵌套JSON结构
  • 保留null值输出(Python中显示为None,如需输出null可替换str(data)为"null" if data is None else str(data))
  • 完全不输出键,仅处理值的嵌套关系
  • 递归逻辑通用,适配所有合法JSON类型

内容的提问来源于stack exchange,提问作者Denio Mariz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:58:11