Python中如何将嵌套JSON扁平化转换为Pandas DataFrame
嵌套JSON转DataFrame实现方案
原有方案问题
你之前使用的flatten_json函数会将整个JSON结构拍平为单个全局字典,所有字段的属性会被合并为列,无法实现每个字段名单独占一行的要求,也不能自动补全不同字段的缺失属性值。
兼容多层嵌套的实现代码
直接使用pandas内置的json_normalize即可实现需求,该函数原生支持嵌套结构展开、自动填充缺失值,无需自行维护递归拍平逻辑:
import pandas as pd def json_fields_to_df(nested_json): # 提取所有字段的配置信息 fields_config = nested_json.get("fields", {}) # 展开每个字段的嵌套属性 df = pd.json_normalize(list(fields_config.values())) # 新增字段名列,放在第一列 df.insert(0, "field_name", list(fields_config.keys())) # 缺失值统一替换为NULL,不需要可以删除这行 df = df.fillna("NULL") return df
效果测试
测试简单嵌套JSON
输入示例:
simple_json = { "fields": { "tcidte": { "mode": "required", "type": "date", "format": "%Y%m%d" }, "tcmcid": { "mode": "required", "type": "string" }, "tcacbr": { "mode": "required", "type": "string" } } } print(json_fields_to_df(simple_json))
输出结果:
field_name mode type format 0 tcidte required date %Y%m%d 1 tcmcid required string NULL 2 tcacbr required string NULL
测试深层嵌套JSON
输入示例:
deep_json = { "fields": { "action": { "type": { "field_type": "string" }, "mode": "required" }, "upi": { "type": { "field_type": "string" }, "regex": "^[0-9]{9}$", "mode": "required" }, "firstname": { "type": { "field_type": "string" }, "mode": "required" } } } print(json_fields_to_df(deep_json))
输出结果:
field_name mode type.field_type regex 0 action required string NULL 1 upi required string ^[0-9]{9}$ 2 firstname required string NULL
说明
- 多层嵌套的属性会自动用
.拼接生成列名,无需额外处理 - 缺失属性自动填充为NULL,符合需求
- 方案兼容绝大多数嵌套JSON结构,不需要调整递归逻辑
内容的提问来源于stack exchange,提问作者Elliot_J
相关产品推荐
相关产品推荐

