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

如何扁平化嵌套JSON以适配SQL上传?Python代码求助

完全扁平化嵌套JSON适配SQL上传的Python解决方案

你原来的json_normalize调用只处理了顶层结构,没对in_network里的多层嵌套列表做展开。要实现完全扁平化,得逐层解析嵌套的列表和字典,把所有字段拆成独立列。下面是优化后的代码:

import json
import pandas as pd

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

# 第一步:展开最外层的in_network列表,保留顶层元数据字段
df = pd.json_normalize(
    data,
    record_path='in_network',
    meta=[
        'reporting_entity_name', 'reporting_entity_type', 'plan_name',
        'plan_id_type', 'plan_id', 'plan_market_type', 'last_updated_on', 'version'
    ]
)

# 第二步:展开negotiated_rates列表并解析内部字典
df = df.explode('negotiated_rates').reset_index(drop=True)
df = pd.concat([df.drop('negotiated_rates', axis=1), pd.json_normalize(df['negotiated_rates'])], axis=1)

# 第三步:展开provider_groups列表并解析内部字典
df = df.explode('provider_groups').reset_index(drop=True)
df = pd.concat([df.drop('provider_groups', axis=1), pd.json_normalize(df['provider_groups'])], axis=1)

# 处理npi列表:转成字符串(适配SQL存储,避免数组类型问题)
df['npi'] = df['npi'].apply(lambda x: ','.join(map(str, x)))

# 第四步:展开tin字典为独立列
df = pd.concat([df.drop('tin', axis=1), pd.json_normalize(df['tin'])], axis=1)

# 第五步:展开negotiated_prices列表并解析内部字典
df = df.explode('negotiated_prices').reset_index(drop=True)
df = pd.concat([df.drop('negotiated_prices', axis=1), pd.json_normalize(df['negotiated_prices'])], axis=1)

# 查看扁平化后的结果
print(df.columns)

关键步骤说明

  • 用json_normalize的record_path参数指定要展开的列表字段,meta保留顶层的非列表字段,确保每条记录都关联原始的元数据。
  • 对每层嵌套的列表(negotiated_rates、provider_groups、negotiated_prices),先用explode把列表拆成多行,再用json_normalize解析里面的字典,合并到原DataFrame。
  • 把npi列表转成字符串,因为大部分SQL数据库不直接支持数组类型,这样更适配上传需求。
  • 对嵌套的字典(比如tin),直接用json_normalize拆成独立列。

运行后,所有字段都会变成类似negotiation_arrangement、negotiated_rate这样的独立列,完全没有嵌套结构,直接可以导入SQL数据库。

内容的提问来源于stack exchange,提问作者BARE BEAR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:50:22