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
相关产品推荐
相关产品推荐

