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

如何标准化JSON响应并将其转换为DataFrame?

问题描述

我正在尝试标准化JSON字符串并将其转换为DataFrame。实际工作数据属于机密内容,无法展示,以下虚构场景可说明需求:

import json
import requests
import pandas as pd
from pandas.io.json import json_normalize

# 完全无法工作...
url = 'http://api.open-notify.org/iss-now.json'
response = requests.get(url)
text = response.text

# 抛出错误
df = json_normalize(text)

# 能转成列表但无法打印列名
my_list=[]
my_list.append(text)
print(type(my_list))

df = json_normalize(my_list)
df.columns
print(type(df))
df

我得到的是嵌套在列表中的字典。如何标准化JSON字符串并将其转换为标准化的DataFrame?实际JSON文件结构如下:

[{'id': '21201', 'name': 'SRW Utility, 4x4', 'latitude': 35.31068751, 'longitude': -80.66177891, 'headingDegrees': 161.2, 'speedMilesPerHour': 0}]

希望提取id、latitude、longitude等作为表头,并在表头下方以行形式展示数据。

解决方案

核心问题是你传递给json_normalize的是JSON字符串,但它需要的是Python原生的字典或列表对象。以下是正确的处理步骤:

1. 解析JSON字符串为Python对象

不管是API响应的文本还是本地JSON字符串,都需要先转换成Python可识别的字典/列表:

import json
import requests
import pandas as pd
from pandas.io.json import json_normalize

# 处理API响应的情况:直接用response.json()更简便,等价于json.loads(response.text)
url = 'http://api.open-notify.org/iss-now.json'
response = requests.get(url)
data = response.json()

# 处理实际JSON字符串场景(如果是本地读取的字符串)
actual_json_str = '[{"id": "21201", "name": "SRW Utility, 4x4", "latitude": 35.31068751, "longitude": -80.66177891, "headingDegrees": 161.2, "speedMilesPerHour": 0}]'
actual_data = json.loads(actual_json_str)

2. 转换为DataFrame

情况1:简单结构(如你实际的列表套字典)

对于这种无深层嵌套的结构,直接用pd.DataFrame()更简洁:

df = pd.DataFrame(actual_data)
# 可选:提取指定列
df = df[['id', 'latitude', 'longitude', 'name', 'headingDegrees', 'speedMilesPerHour']]
print(df.columns)
print(df)

情况2:处理嵌套JSON(比如ISS API的响应)

ISS API响应是嵌套字典结构,用json_normalize可以展开嵌套字段:

df = json_normalize(data)
# 可选:重命名列
df.rename(columns={'iss_position.latitude': 'latitude', 'iss_position.longitude': 'longitude'}, inplace=True)
print(df)

常见错误原因

  • 直接传递JSON字符串给json_normalize:它无法解析字符串,必须是Python对象。
  • 把JSON字符串添加到列表中再传递:此时列表里存的还是字符串,不是字典,依然无法解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:02:39