Python调用Fulcrum API拉取大量数据触发JSONDecodeError如何解决?
报错原因
该报错是响应内容不完整导致JSON结构被破坏触发的,核心原因如下:
- 你设置的
per_page参数值(200000)远超过Fulcrum API的单页返回上限,接口返回数据到大小阈值后被强制截断,你在报错位置截取到的\n\n!!!!!!!!\n{"messa就是接口插入的错误提示片段,打断了原有JSON的数组结构,导致JSON解析器无法识别后续内容。 - 小数据量(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
相关产品推荐
相关产品推荐

