调用Uber Eats API获取餐厅报告失败,JSON解析报错求助
问题排查:Uber Eats API JSON解析错误
问题描述
调用Uber Eats获取餐厅报告的API时,触发JSON解析错误,错误信息如下:
'{"error":"Could not parse json: readObjectStart: expect { or n, but found \x00, error found in #0 byte of ...||..., bigger context ...||..."}'
Python测试代码如下:
import requests import json payload = { "report_type": "FINANCE_SUMMARY_REPORT", "store_uuids": "xxx", "start_date": "2022-09-01", "end_date": "2022-09-15" } headers = { "authorization": "Bearer xxx" } report_response = requests.post('https://api.uber.com/v1/eats/report', data=payload, headers=headers) report_response.text
Python和Postman中均出现相同错误。
问题原因
- 请求体格式不匹配:代码中用
data=payload发送请求,requests会自动将其编码为表单格式(application/x-www-form-urlencoded),但Uber Eats的API要求接收JSON格式的请求体,这直接导致API无法解析请求内容,抛出错误。 - Postman配置不当:如果Postman中没有将请求体设置为
raw -> JSON模式,而是用了表单提交,同样会触发该解析错误。
解决方案
1. 修正Python代码
把data=payload替换为json=payload,requests会自动将payload序列化为JSON字符串,并添加Content-Type: application/json请求头,符合API的格式要求:
import requests payload = { "report_type": "FINANCE_SUMMARY_REPORT", "store_uuids": "xxx", "start_date": "2022-09-01", "end_date": "2022-09-15" } headers = { "authorization": "Bearer xxx" } # 使用json参数替代data report_response = requests.post('https://api.uber.com/v1/eats/report', json=payload, headers=headers) print(report_response.text)
2. 调整Postman配置
- 请求方法保持
POST - 在
Body标签下选择raw,并将格式切换为JSON - 将payload以JSON格式粘贴到输入框
- 确保
Headers中包含Authorization: Bearer xxx,Content-Type: application/json会由Postman自动添加
验证
修改完成后重新发送请求,API应能正确解析请求体,返回正常响应。
内容的提问来源于stack exchange,提问作者nas-fa
相关产品推荐
相关产品推荐

