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

如何自动扁平化包含嵌套列表与字典的超大型JSON并导出为CSV?

JSON层级结构自动化扁平化方案

针对你不需要手动指定嵌套路径、离线处理少量数据的需求,直接用递归实现全自动化扁平化即可,无需手动配置json_normalize的record_path和meta参数,实现代码如下:

import pandas as pd

def flatten_json(nested_json, parent_key='', sep='.'):
    items = []
    if isinstance(nested_json, dict):
        for k, v in nested_json.items():
            new_key = f"{parent_key}{sep}{k}" if parent_key else k
            # 处理bytes类型转字符串
            if isinstance(v, bytes):
                v = v.decode('utf-8')
            # 递归处理字典
            if isinstance(v, dict):
                items.extend(flatten_json(v, new_key, sep=sep).items())
            # 处理列表
            elif isinstance(v, list):
                # 判断列表内是否全为基础数据类型
                all_basic = all(not isinstance(i, (dict, list)) for i in v)
                if all_basic:
                    # 基础类型列表转逗号分隔字符串
                    items.append((new_key, ','.join(map(str, v))))
                else:
                    # 嵌套结构的列表,逐个展开处理
                    for idx, item in enumerate(v):
                        items.extend(flatten_json(item, f"{new_key}[{idx}]", sep=sep).items())
            else:
                items.append((new_key, v))
    elif isinstance(nested_json, list):
        # 兼容根节点为列表的场景
        for idx, item in enumerate(nested_json):
            items.extend(flatten_json(item, f"[{idx}]", sep=sep).items())
    return dict(items)

# 测试你的示例数据
d2 = {'key2':None, 
'a':1 , 'b':{'v':[1,2,3]}, 
'c': {'c1':'c1', 'c2':'c2'}, 
'd': {'d1': 1, 'd2':{'d3': 'd3', 'd4': 'd4', 'd5':[3,3,3,4]}}, 
'key':
{'seqOf': [{'seqOf': 
{'dedicatedAccountID': '191', 'campaignIdentifier': None, 'transactionAmount': b'106.670000',
 'adjustmentAmount': None, 'accountBalance': b'122.000000', 'accountExpiryDateBefore': None, 
'accountExpiryDateAfter': None, 'accountStartDateBefore': None, 'accountStartDateAfter': None,
 'mainDedicatedAccountID': None, 'offerIdentifier': None, 'dedicatedAccountUnit': '1', 
'transactionUnits': None, 'adjustmentUnits': None, 'unitBalance': None, 'realMoneyFlag': None}
}]}}

# 扁平化后转DataFrame导出CSV
flat_data = flatten_json(d2)
pd.DataFrame([flat_data]).to_csv("output.csv", index=False, encoding="utf-8-sig")

效果说明

运行上述代码后,所有嵌套层级的键都会自动以.拼接作为CSV列名,示例中d.d2.d5会转为3,3,3,4的字符串存储,key.seqOf[0].seqOf.dedicatedAccountID会直接作为列名,对应值为191,完全不需要手动指定任何路径参数。如果需要将列表内的字典展开为多行,仅需对上述代码做简单调整即可,核心逻辑不变。

内容的提问来源于stack exchange,提问作者Thadeu Melo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:18:03