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

如何将嵌套JSON转换为目标Pandas DataFrame?求技术指导

嵌套JSON转Pandas DataFrame解决方案

针对你提供的嵌套JSON结构,我们可以通过遍历嵌套层级+收集数据行的方式,将所有层级信息和数组内容整合到目标DataFrame中,具体实现步骤如下:

实现思路

  1. 遍历tables下的所有顶级表节点(如Cloc、T1)
  2. 递归遍历每个表的嵌套结构,定位到值为数组的子节点(如Mob、T3)
  3. 收集每个数组元素的上层标识(表名、层级路径)和元素内的字段(loc、loc2)
  4. 将收集到的所有行数据转换为DataFrame,按需处理数组类型字段

代码实现

import pandas as pd

# 输入的嵌套JSON数据
nested_json = {
    "tables": {
        "Cloc": {
            "MINT": {
                "CANDY": {
                    "Mob": [
                        {"loc": "AA", "loc2": ["AAA"]},
                        {"loc": "AA", "loc2": ["AAA"]}
                    ]
                }
            }
        },
        "T1": {
            "MINT": {
                "T2": {
                    "T3": [{"loc": "AAA", "loc2": ["AAA"]}]
                }
            }
        }
    }
}

data_rows = []

# 遍历顶级表名
for table_name, table_data in nested_json['tables'].items():
    # 递归遍历嵌套结构,寻找数组节点
    def traverse(node, current_path):
        for key, value in node.items():
            if isinstance(value, list):
                # 遍历数组内的每个元素,收集完整数据行
                for item in value:
                    row = {
                        "表名": table_name,
                        "层级路径": ".".join(current_path + [key]),
                        "loc": item["loc"],
                        "loc2": item["loc2"]
                    }
                    data_rows.append(row)
            elif isinstance(value, dict):
                # 继续递归遍历子层级
                traverse(value, current_path + [key])
    
    traverse(table_data, [])

# 转换为DataFrame
df = pd.DataFrame(data_rows)

# 可选:将loc2的数组展开为单独行(如果需要)
# df = df.explode("loc2", ignore_index=True)

print(df)

输出示例

执行上述代码后,得到的DataFrame如下:

表名层级路径locloc2
ClocMINT.CANDY.MobAA['AAA']
ClocMINT.CANDY.MobAA['AAA']
T1MINT.T2.T3AAA['AAA']

进阶调整

如果需要将层级路径拆分为单独的列(如level1、level2、level3),可以修改数据收集逻辑:

# 替换traverse函数内的row生成代码
path_parts = current_path + [key]
row = {"表名": table_name}
# 为每个层级生成单独列
for idx, part in enumerate(path_parts, 1):
    row[f"level{idx}"] = part
row.update({
    "loc": item["loc"],
    "loc2": item["loc2"]
})
data_rows.append(row)

调整后输出的DataFrame会包含单独的层级列,更贴合结构化展示需求。

内容的提问来源于stack exchange,提问作者Alind Billore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:55:17