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

如何无需指定表头将嵌套JSON通过Pandas转换为扁平化CSV

无需手动指定表头的嵌套JSON扁平化CSV实现方案

方法一:利用Pandas原生json_normalize快速处理

如果你的JSON结构以字典嵌套为主,少量列表嵌套在顶层,直接用pd.json_normalize并指定分隔符即可自动展开所有层级,无需手动指定表头:

import pandas as pd
import json

# 加载你的JSON数据(可以是从文件读取的列表或字典)
with open('students.json', 'r') as f:
    student_data = json.load(f)

# 自动扁平化所有嵌套层级,用点分隔嵌套键
df = pd.json_normalize(student_data, sep='.')

# 导出为CSV
df.to_csv('flattened_students.csv', index=False)

这个方法简洁高效,原生支持大部分常见嵌套结构,列名会自动以父键.子键的形式生成,比如student_details.contact.email。

方法二:递归函数处理复杂嵌套(含多层列表)

如果你的JSON包含多层嵌套的列表(比如学生有多组课程、多个联系人),上面的方法可能无法完全展开,这时可以写一个递归函数先把每个JSON条目转为单层字典,再转成DataFrame:

import pandas as pd
import json

def flatten_json(obj, parent_key='', sep='.'):
    items = []
    for k, v in obj.items():
        new_key = f"{parent_key}{sep}{k}" if parent_key else k
        # 处理嵌套字典
        if isinstance(v, dict):
            items.extend(flatten_json(v, new_key, sep).items())
        # 处理列表,给每个元素加索引标记
        elif isinstance(v, list):
            for idx, item in enumerate(v):
                if isinstance(item, dict):
                    items.extend(flatten_json(item, f"{new_key}[{idx}]", sep).items())
                else:
                    items.append((f"{new_key}[{idx}]", item))
        # 普通键值对直接加入
        else:
            items.append((new_key, v))
    return dict(items)

# 加载并处理数据
with open('students.json', 'r') as f:
    student_data = json.load(f)

# 扁平化每个学生条目
flattened_list = [flatten_json(item) for item in student_data]

# 转DataFrame并导出
df = pd.DataFrame(flattened_list)
df.to_csv('fully_flattened_students.csv', index=False)

这种方法能处理任何深度的嵌套结构,列表元素会生成类似courses[0].name、courses[1].score的列名,完全保留原始数据的层级关系,且全程不需要手动指定任何列名或表头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:05:23