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

Python中ValueError:无法解码JSON对象(谷歌地图Geocoding API对接)求助

解决Geocoding API对接时的JSON解码错误

我来帮你排查这个ValueError: No JSON object could be decoded的问题~这个错误基本是因为API返回的内容不是有效的JSON数据,大概率是你的请求URL有问题,导致谷歌返回了HTML错误页面而非预期的JSON响应。

先看你代码里的几个关键问题:

  • URL里用了&代替&,这是HTML转义字符,谷歌API无法识别这个参数分隔符,得直接用&。
  • address=%s后面多了一个空格,会让地址参数带上多余空格,可能引发请求参数解析错误。
  • 代码里没有检查请求的响应状态,也没有处理解码失败的情况,很难定位问题。

给你修正后的完整代码,加上了错误处理和状态检查:

import httplib2
import json

def getGeocodeLocation(inputString):
    google_api_key = "MY_API_KEY"  # 替换成你的有效API密钥
    locationString = inputString.replace(" ", "+")
    # 修正URL:去掉多余空格,用&代替&
    url = f'https://maps.googleapis.com/maps/api/geocode/json?address={locationString}&key={google_api_key}'
    
    h = httplib2.Http()
    response, content = h.request(url, 'GET')
    
    # 先检查请求是否成功(状态码200表示正常)
    if response.status != 200:
        print(f"请求出错啦,状态码:{response.status},返回内容:{content.decode('utf-8')}")
        return None
    
    try:
        # 先把字节内容转成UTF-8字符串再解析JSON
        result = json.loads(content.decode('utf-8'))
        # 检查API返回的状态
        if result.get('status') == 'OK':
            # 提取纬度和经度
            return result['results'][0]['geometry']['location']
        else:
            print(f"API返回错误状态:{result.get('status')},错误信息:{result.get('error_message')}")
            return None
    except json.JSONDecodeError as e:
        print(f"JSON解码失败:{str(e)},返回的内容是:{content.decode('utf-8')}")
        return None

另外还有几个排查小建议:

  • 确保你的API密钥已经启用了Geocoding API,并且没有超出配额(可以去谷歌云控制台查看)。
  • 可以把构建好的URL复制到浏览器里直接访问,看看返回的是不是有效JSON,如果是错误页面,根据页面提示调整参数。
  • 注意输入的地址字符串不要有特殊字符,如果有的话,建议用urllib.parse.quote()来编码,比手动替换空格更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:34:17