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

requests请求公交接口调用response.json()报JSON格式错误如何解决

报错原因

Expecting property name enclosed in double quotes: line 1 column 3是JSON解析阶段抛出的语法错误,触发原因是你请求的接口返回内容不符合标准JSON规范:标准JSON要求所有键名必须用双引号包裹,不允许出现单引号键名、首尾多余非JSON字符、JSONP函数包裹等情况。
你当前代码里直接打印response只能拿到HTTP响应的状态对象(比如<Response [200]>),看不到接口实际返回的文本内容,自然无法定位格式问题。

修复步骤
  • 第一步:先获取接口返回的原始内容,不要直接调用.json()
    把原有代码替换为以下内容,先确认接口实际返回的数据形态:
import requests

url = 'http://passio3.com/www/mapGetData.php?getBuses=1&deviceId=1683997&wTransloc=1'
response = requests.get(url)
# 打印响应状态码,确认请求是否正常到达服务端
print("响应状态码:", response.status_code)
# 打印原始返回文本,定位格式问题
print("原始返回内容:", response.text)
  • 第二步:根据原始返回的格式选择对应的解析方式
    这类公交查询接口返回非标准JSON是非常常见的情况,对应处理方案如下:
    • 如果返回内容是用单引号包裹键值的类JSON结构:不要用requests自带的.json()方法,改用Python内置的ast模块安全解析:
      import ast
      data = ast.literal_eval(response.text)
      
    • 如果返回内容是JSONP格式(内容被函数名包裹,形态类似getData({...})):先剥离首尾的函数包裹字符,再做JSON解析:
      import json
      # 剥离首尾的JSONP包裹部分,提取纯JSON字符串
      pure_json = response.text.strip().split('(', 1)[1].rsplit(')', 1)[0]
      data = json.loads(pure_json)
      
    • 如果返回内容首尾有多余空白、BOM头:先对response.text调用.strip()方法清理首尾无效字符,再尝试解析。

如果打印原始内容发现返回的是HTML页面、权限拦截提示,说明你的请求缺少必要的身份标识头(比如User-Agent、访问令牌、Cookie),需要先从浏览器开发者工具的网络面板中,复制正常访问该接口时携带的请求头,加到requests请求参数中再发起请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:06:22