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

如何在Python中将嵌套JSON完全展开为DataFrame

完全展开嵌套JSON为DataFrame的解决方案

针对你提供的嵌套JSON结构,直接使用json_normalize只能得到单行数据,无法完全展开列表和嵌套对象。以下是分步拆解并合并为完整表格的实现方案:

步骤1:加载JSON数据并提取核心部分

首先读取JSON文件,提取data字段作为处理核心:

import json
import pandas as pd

# 加载JSON数据(假设文件名为report.json)
with open('report.json', 'r', encoding='utf-8') as f:
    raw_data = json.load(f)
data = raw_data['data']

步骤2:拆解各嵌套模块

2.1 展开货币列表(currencies)

这部分是多行数据,直接用json_normalize展开:

df_currencies = pd.json_normalize(data['currencies'])

2.2 拆分日期区间(periods)

将嵌套的日期列表拆分为开始/结束日期:

period_start, period_end = data['periods'][0]
date_data = pd.DataFrame({
    'start_date': [period_start],
    'end_date': [period_end]
})

2.3 展开指标数值(points、totals)

处理points和totals中的嵌套列表与对象,提取具体数值:

# 处理points中的measures
df_points = pd.json_normalize(data['points'])
df_points = df_points.explode('measures')\
                     .apply(lambda x: x['measures'] if isinstance(x['measures'], dict) else x, axis=1)\
                     .apply(pd.Series)\
                     .add_suffix('_point')

# 处理totals中的数值
df_totals = pd.json_normalize(data['totals']['2'])\
              .apply(pd.Series)\
              .add_suffix('_total')

2.4 整理基础报表信息

提取报表标题、分页状态等基础字段:

base_info = pd.DataFrame({
    'report_title': [data['report_title']],
    'is_last_page': [data['is_last_page']],
    'total_rows': [data['total_rows']]
})

步骤3:合并所有数据

将上述各模块合并,由于报表只有1行核心数据,与货币列表做交叉合并,得到每个货币对应的完整报表行:

# 合并基础信息、日期、指标数值
core_data = base_info.merge(date_data, left_index=True, right_index=True)\
                     .merge(df_points, left_index=True, right_index=True)\
                     .merge(df_totals, left_index=True, right_index=True)

# 交叉合并货币列表与核心数据
final_df = df_currencies.merge(core_data, how='cross')

最终效果

生成的final_df会将所有嵌套结构完全展开,每个货币对应一行数据,包含所有指标、日期、报表信息,无任何嵌套单元格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:03:23