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

如何将每行含嵌套JSON的换行分隔JSON文件转为pandas DataFrame

如何将每行含嵌套JSON的换行分隔JSON文件转为pandas DataFrame

换行分隔的JSON(JSON Lines)文件每行都是独立JSON对象,且包含嵌套结构时,可通过以下两种常用方法转换为pandas DataFrame:

方法一:逐行解析+json_normalize展开嵌套

先逐行读取并解析每个JSON对象,再用pd.json_normalize按需展开嵌套层级,适合精准控制嵌套结构的展开方式。

示例代码:

import pandas as pd
import json

# 读取文件并收集所有解析后的JSON对象
parsed_data = []
with open('your_file.jsonl', 'r', encoding='utf-8') as f:
    for line in f:
        # 跳过空行(可选)
        if line.strip():
            try:
                parsed_data.append(json.loads(line))
            except json.JSONDecodeError as e:
                print(f"解析行失败: {e}")
                continue

# 展开嵌套结构:以嵌套数组和嵌套对象为例
# record_path 指定要展开的嵌套数组字段,meta 指定保留的顶层/其他嵌套字段
df = pd.json_normalize(
    parsed_data,
    record_path=['posts'],  # 展开posts数组
    meta=[
        'id',
        ['user', 'name'],   # 保留user下的name字段
        ['user', 'age']     # 保留user下的age字段
    ]
)
print(df)

方法二:read_json读取后批量展开嵌套

先用pd.read_json的lines=True参数直接读取JSON Lines文件,得到包含嵌套列的原始DataFrame,再对嵌套列单独展开合并。

示例代码:

import pandas as pd

# 直接读取JSON Lines文件,每行作为DataFrame的一行
raw_df = pd.read_json('your_file.jsonl', lines=True, encoding='utf-8')

# 展开嵌套对象列(如user)
nested_user_df = pd.json_normalize(raw_df['user'])
# 合并展开后的列到原始DataFrame,删除原嵌套列
result_df = pd.concat([raw_df.drop('user', axis=1), nested_user_df], axis=1)

# 若存在嵌套数组(如posts),可单独展开并关联原数据
posts_expanded = pd.json_normalize(
    raw_df.to_dict('records'),
    record_path='posts',
    meta='id'  # 保留id用于关联
)
print(posts_expanded)

注意事项

  • 若文件中存在格式错误的JSON行,建议添加try-except捕获解析异常,避免程序中断;
  • 嵌套结构不统一时,json_normalize会自动填充缺失值为NaN,无需额外处理;
  • 对于深度嵌套的结构,可多次调用json_normalize逐层展开,或调整meta参数指定需要保留的字段路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:10:51