调用request.get(...).json()时如何处理HTML转义字符引发的JSON解码错误?
解决第三方API返回JSON含未转义引号导致的JSONDecodeError
问题根源:第三方返回的JSON格式不合法——字符串值内部的双引号(如HTML属性中的")未正确转义,导致JSON解析器误判字符串结束位置,抛出JSONDecodeError: Expecting ',' delimiter错误。
以下是两种可行的处理方案:
方案1:手动修复响应文本的转义问题
先获取原始响应文本,修正其中未转义的双引号后再解析:
import requests import json import re response = requests.get("第三方API地址") # 获取未解析的原始响应文本 response_text = response.text # 针对HTML转义后的标签(如<代替<),修复属性内的未转义引号 fixed_text = re.sub(r'(?<=<[^&]+=")([^"]+)', lambda match: match.group(0).replace('"', '\\"'), response_text) # 解析修复后的合法JSON data = json.loads(fixed_text)
如果问题仅集中在xmlns属性的引号,可使用更精准的替换:
fixed_text = response_text.replace('xmlns="', 'xmlns=\\"')
方案2:使用宽松的JSON解析库
若不想手动处理转义,可使用支持不严格JSON语法的库(如demjson),自动兼容未正确转义的字符:
- 安装依赖库:
pip install demjson
- 解析代码:
import requests import demjson response = requests.get("第三方API地址") # 直接解析原始响应文本,无需手动修复 data = demjson.decode(response.text)
内容的提问来源于stack exchange,提问作者sokeefe
相关产品推荐
相关产品推荐

