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

将FastAPI返回的JSON转Pandas DataFrame遇ValueError错误求助

问题分析与解决办法

可能的原因

你遇到的这个错误,大概率是客户端拿到的JSON内容不符合pd.read_json的预期。虽然服务端用了orient='records'生成数组格式的JSON,但可能存在以下问题:

  • 服务端返回方式错误:如果FastAPI直接返回df.to_json(...)的结果(即一个JSON字符串),FastAPI会自动把这个字符串再包裹一层JSON,导致客户端拿到的是一个字符串类型的JSON值,而非预期的字典数组。比如原本的[{"a":1},{"a":2}]会被转成"[{\"a\":1},{\"a\":2}]",此时pd.read_json解析的是单个字符串,自然会报“所有标量值需要传索引”的错误。
  • 客户端接收的JSON格式异常:响应内容被意外修改、存在多余转义字符或格式错误,导致pd.read_json无法识别为数组结构。

解决步骤

步骤1:修正服务端返回逻辑

把服务端的返回代码从:

return df.to_json(orient='records', date_format='iso', indent=4)

改成直接返回字典数组:

return df.to_dict(orient='records')

FastAPI会自动把这个列表转换成标准的JSON数组响应,客户端拿到的就是正确的[{"col1": val1,...},...]格式,无需手动转JSON字符串。

步骤2:客户端侧兼容处理

如果暂时没法修改服务端,可以先把JSON字符串解析成Python列表,再转成DataFrame:

import json
import pandas as pd

# 解析JSON字符串为Python列表
data = json.loads(response.text)
# 转换为DataFrame
df = pd.DataFrame(data)

这样能绕过pd.read_json对特殊格式的解析问题。

步骤3:验证响应内容

先打印response.text确认实际内容:

print(response.text)

如果输出是带引号的字符串(比如"[{...}]"),说明服务端返回方式有问题,按步骤1修改即可;如果是正常的数组格式,可尝试指定pd.read_json的解析方式:

df = pd.read_json(response.text, orient='records')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:22:14