Python使用json模块解析JSON数据遇JSONDecodeError求助
解决json.loads()抛出JSONDecodeError: Expecting property name enclosed in double quotes的问题
这个错误的核心原因是你从API获取的数据不符合标准JSON格式——JSON强制要求所有属性名(键)必须用双引号包裹,而你的数据大概率存在单引号代替双引号、语法错误(比如多余逗号),甚至根本不是JSON的情况。
排查与解决步骤:
先打印原始响应内容,定位问题
别直接解析,先把API返回的原始文本完整打出来,用repr()能显示转义字符和引号类型,方便排查:import requests resp = requests.get("你的API地址") # 打印原始内容,看清楚引号和格式 print(repr(resp.text))错误提示
line 1 column 2,重点看开头的字符,比如是不是{'name': 'xxx'}这种用单引号的伪JSON。针对性修复格式
- 如果是Python风格的单引号字典,用
ast.literal_eval()替代json.loads(),它能兼容这种非标准格式:import ast data = ast.literal_eval(resp.text) - 如果是混合引号的问题,用正则替换未转义的单引号为双引号(注意别替换值里的单引号):
import re fixed_json = re.sub(r"(?<!\\)'", '"', resp.text) data = json.loads(fixed_json) - 如果有多余的尾逗号(比如
{"key": 1,}),ast.literal_eval()也能直接处理,不用额外修改。
- 如果是Python风格的单引号字典,用
确认API返回的内容类型
有些时候API返回的根本不是JSON——比如返回了HTML错误页面(404/500),或者Content-Type是text/plain。可以先检查响应头:print(resp.headers.get('Content-Type'))如果不是
application/json,先确认API请求是否正确(比如参数、token是否有效)。
内容的提问来源于stack exchange,提问作者Yashashviiii
相关产品推荐
相关产品推荐

