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

如何评估JSON内容结构并将嵌套JSON正确转换为带表头的DataFrame?

问题

已查阅相关讨论帖,但使用其中方法仍遇到问题。

执行以下代码获取JSON数据:

import json
import requests
import pandas as pd

url1 = "https://chronicdata.cdc.gov/views/iw6q-r3ja/rows.json"

content = requests.get(url1)
d = content.json()
print(d.keys())

得到输出:

dict_keys(['meta', 'data'])

但使用pd.DataFrame(d['data'])或urlopen获取数据后转换的代码,得到的DataFrame字段异常且无表头。

对JSON使用经验较少,不清楚需使用哪些函数参数。希望掌握未来高效处理此类问题的方法:在浏览器中打开完整下载链接能看到清晰的结构,但不确定这是否能帮助解析JSON。

部分实时更新数据仅提供JSON格式,希望掌握高效处理方法,不像使用CSV链接:

url2 = "https://data.cdc.gov/api/views/iw6q-r3ja/rows.csv"
df = pd.read_csv(url2)

那样能直接得到带表头的DataFrame。

疑问:

  1. 获取JSON后如何最佳评估其结构?
  2. 能否编写代码以正确读取表头,且在数据源更新时仍能适配列结构?

解决方案

一、评估JSON结构的方法

  • 先确认顶层结构:打印d.keys()明确顶层键,这类开放数据的JSON通常meta存元数据(表头、字段规则),data存实际业务记录。
  • 深挖元数据细节:用pprint模块格式化输出d['meta'],重点定位字段定义模块(比如columns字段),这是表头的核心来源。示例代码:
from pprint import pprint
pprint(d['meta']['view']['columns'])
  • 抽样验证数据对应关系:取d['data']的前1-2条记录,确认每条数据的字段顺序和meta中columns的顺序是否匹配:
print(d['data'][0])
  • 浏览器辅助可视化:直接在浏览器打开JSON链接,利用浏览器自带的JSON格式化功能,能直观看到层级关系,快速定位元数据和业务数据的位置。

二、编写适配性强的解析代码

这类开放平台的JSON结构通常具备固定规则:meta.view.columns存储表头信息,data存储按顺序排列的记录。通过提取columns中的name作为表头,再将data转换为DataFrame,即可实现自动适配列结构的需求:

import requests
import pandas as pd
from pprint import pprint

url = "https://chronicdata.cdc.gov/views/iw6q-r3ja/rows.json"
response = requests.get(url)
data_dict = response.json()

# 从元数据中提取表头:取columns数组里的name字段
headers = [col['name'] for col in data_dict['meta']['view']['columns']]

# 将业务数据转换为DataFrame并指定表头
df = pd.DataFrame(data_dict['data'], columns=headers)

# 查看转换结果
print(df.head())

该代码的优势是:只要数据源的顶层结构(meta.view.columns和data)不变,即使后续新增、修改列,代码也能自动适配新的表头和列结构,无需手动调整。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:36:33