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

如何将嵌套JSON完整解析为Pandas DataFrame?

问题描述

背景

我尝试从一个返回大型嵌套JSON数据的API获取数据,希望将其转换为更易读的格式,该API的JSON结构可查看对应的接口文档(点击右侧展开全部)。

已尝试方案

我查阅了Stack Overflow等网站,得知pd.json_normalize是可行方案,但多次尝试后仅能解析一层:

# 尝试1
url = 'https://api.opennem.org.au/station/'
response = requests.get(url).json()
df2 = pd.json_normalize(response, max_level=0)
print(df2)

# 尝试2
url = 'https://api.opennem.org.au/station/'
response = requests.get(url).json()
df = pd.json_normalize(response, record_path=['facilities'])
print(df)

当前错误输出

version  ...                                               data
0  3.11.3  ...  [{'id': 488, 'code': 'ADP', 'name': 'Adelaide ...

[1 rows x 5 columns]

请求帮助

请问如何将这个大型嵌套JSON完整解析为DataFrame?


解决方案

这个API返回的结构外层包含data字段,内部才是嵌套的站点列表,所以需要指定record_path指向data,同时用meta保留外层元数据,让json_normalize自动递归解析嵌套内容。

基础解析代码

import requests
import pandas as pd

url = 'https://api.opennem.org.au/station/'
response = requests.get(url).json()

# 展开data数组,保留外层元数据,用下划线连接嵌套字段
df = pd.json_normalize(
    response,
    record_path='data',
    meta=['version', 'revision', 'updated_at'],
    sep='_'
)

print(df.head())

深层嵌套字段展开

如果需要进一步展开站点下的facilities等嵌套数组,可以单独处理:

# 展开每个站点的facilities字段,保留站点基础信息
df_facilities = pd.json_normalize(
    response['data'],
    record_path='facilities',
    meta=['id', 'code', 'name'],
    sep='_'
)

print(df_facilities.head())

关键参数说明

  • record_path:指定JSON中要展开为DataFrame行的数组字段,这里外层data是核心数据数组。
  • meta:保留外层非数组字段,作为结果的附加列。
  • sep:定义嵌套字段的连接符,避免列名出现.引发后续操作问题。
  • 默认情况下json_normalize会递归解析所有嵌套层级,无需额外设置max_level(除非要限制展开深度)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:30:48