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

Python调用Fulcrum API拉取大量数据触发JSONDecodeError如何解决?

报错原因

该报错是响应内容不完整导致JSON结构被破坏触发的,核心原因如下:

  1. 你设置的per_page参数值(200000)远超过Fulcrum API的单页返回上限,接口返回数据到大小阈值后被强制截断,你在报错位置截取到的\n\n!!!!!!!!\n{"messa就是接口插入的错误提示片段,打断了原有JSON的数组结构,导致JSON解析器无法识别后续内容。
  2. 小数据量(limit 3)时没有触发大小阈值,响应结构完整,因此可以正常解析。
解决方法
  • 优先校验响应状态:解析前先打印response.status_code确认接口返回的是200正常状态,避免把413(实体过大)、408(超时)等错误响应当成正常JSON解析。
  • 改用分页拉取:Fulcrum官方建议单页拉取条数不超过5000,你可以循环请求不同的page参数,每次拉取5000条,把多页返回的rows数组合并后再统计总长度。示例逻辑:
import requests
import json

url = "https://api.fulcrumapp.com/api/v2/query"
headers = {
    "Accept": "application/json",
    "X-ApiToken": "你的Token"
}
all_rows = []
page = 1
per_page = 5000

while True:
    querystring = {
        "q": 'SELECT * FROM "Inspection Report"',
        "format": "json",
        "headers": "true",
        "metadata": "false",
        "arrays": "false",
        "page": str(page),
        "per_page": str(per_page)
    }
    response = requests.get(url, headers=headers, params=querystring)
    response.raise_for_status() # 直接抛出请求错误,避免解析异常响应
    data = response.json()
    current_rows = data['rows']
    all_rows.extend(current_rows)
    if len(current_rows) < per_page:
        break
    page += 1

print(len(all_rows))
  • 如果仅需要统计总条数,直接修改查询语句为SELECT count(*) FROM "Inspection Report",不需要拉取全量数据,既不会触发大小限制,也能大幅提升请求速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:24:03