使用json.loads转双引号包裹的字符串字典为普通字典时出现JSONDecodeError怎么办
JSONDecodeError 报错原因
- 标准JSON语法强制要求所有属性名、字符串类型值必须使用双引号包裹,你当前的
contract_details字符串使用的是单引号,不符合JSON格式要求 - 字符串中包含Python专属的
nan空值标识,不属于JSON支持的标准数据类型,也会触发解析异常
报错截图:
最优解决方案
使用Python标准库的ast.literal_eval进行解析,该方法专门用于解析Python字面量格式的字符串,天然支持单引号、nan这类Python专属语法,且只会解析字面量不会执行任意代码,安全性有保障:
import ast # 原有获取字段逻辑不变 contract_details = current_order["contract_details"] # 替换json.loads为ast.literal_eval即可 contract_details = ast.literal_eval(contract_details)
备用方案(仅适用于确认字符串无嵌套单引号的场景)
如果必须使用json.loads解析,可以先对字符串做格式兼容处理:
import json contract_details = current_order["contract_details"] # 先将单引号替换为双引号,同时将nan替换为JSON支持的null标识 processed_str = contract_details.replace("'", '"').replace('nan', 'null') contract_details = json.loads(processed_str)
内容的提问来源于stack exchange,提问作者sahil
相关产品推荐
相关产品推荐

