如何将嵌套JSON转换为目标Pandas DataFrame?求技术指导
嵌套JSON转Pandas DataFrame解决方案
针对你提供的嵌套JSON结构,我们可以通过遍历嵌套层级+收集数据行的方式,将所有层级信息和数组内容整合到目标DataFrame中,具体实现步骤如下:
实现思路
- 遍历
tables下的所有顶级表节点(如Cloc、T1) - 递归遍历每个表的嵌套结构,定位到值为数组的子节点(如
Mob、T3) - 收集每个数组元素的上层标识(表名、层级路径)和元素内的字段(
loc、loc2) - 将收集到的所有行数据转换为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如下:
| 表名 | 层级路径 | loc | loc2 |
|---|---|---|---|
| Cloc | MINT.CANDY.Mob | AA | ['AAA'] |
| Cloc | MINT.CANDY.Mob | AA | ['AAA'] |
| T1 | MINT.T2.T3 | AAA | ['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
相关产品推荐
相关产品推荐

