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

调用curl获取JSON结果转换为pandas DataFrame时报错如何解决

问题核心原因

你的代码存在3处明确疏漏,最终传给pandas的根本不是接口返回的JSON结构数据,才会触发两类报错:

  • subprocess.run()默认不会捕获命令行的输出内容,你赋值给swaps的是Python的CompletedProcess运行实例对象,既不是JSON字符串,也不是解析后的字典/列表结构。
  • curl命令里的表单参数用了"这一HTML转义字符,实际传给接口的参数会带多余转义符,会导致接口返回异常内容。
  • 即便拿到了curl返回的文本内容,你也没有做JSON格式解析,直接把原始字符串传给pandas构造方法也无法识别。

你遇到的两个报错本质都是传参类型不匹配:json_normalize抛出NotImplementedError是因为输入不是它支持的字典/列表类型,from_dict抛出构造错误同理,接收到的根本不是字典结构。

修正代码
from subprocess import run
import pandas as pd
import json

# 调用curl时增加输出捕获配置
resp = run(
    'curl --location --request POST https://www.rmb.co.za/rates-service/rates/historical \
    --form productType="Swaps" \
    --form top="13"',
    shell=True,
    capture_output=True,
    text=True
)

# 先校验curl执行状态
if resp.returncode != 0:
    raise RuntimeError(f"接口请求失败,错误信息:{resp.stderr}")

# 解析JSON结构
parsed_data = json.loads(resp.stdout)
# 根据接口返回的实际结构取目标数据,存在嵌套结构时可替换为pd.json_normalize(parsed_data['对应字段名'])
swaps_df = pd.DataFrame(parsed_data['data'])
优化建议
  • 生产场景下不推荐用subprocess调curl发请求,直接用requests库实现POST请求更稳定,不需要处理命令行转义、shell执行风险、输出流捕获的额外逻辑,代码可维护性更高。
  • 拿到接口返回内容后先打印解析后的结构,确认数据层级后再调用pandas的构造方法,避免因为字段层级不对触发解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:39:20