Python解码含单个反斜杠的JSON失败,如何解决?
问题原因及解决方法
错误原因
- JSON规范限制:JSON字符串里的反斜杠
\是专用转义字符,仅允许用于转义特定合法字符(比如\"、\\、\n等),\C属于无效转义序列,不符合JSON官方标准。你提到的jsonlint验证通过,应该是该工具的实现不够严格,没有遵循规范校验。 - Python字符串解析干扰:Python普通字符串中,
\同样会被当作转义符处理。即便Python对\C这种无效转义仅抛出警告而非直接报错,最终传给json.loads()的字符串依然包含\C这个JSON不认可的序列,导致解码失败。
解决方法
要让JSON解析器正确识别并得到b=D:\C的结果,必须保证传入json.loads()的是符合规范的JSON字符串,具体有两种实现方式:
方式1:Python普通字符串双重转义反斜杠
在Python字符串中,\\会被解析为单个\,因此要生成符合JSON规范的D:\\C(对应最终值D:\C),需要在Python字符串中写四层反斜杠:
import json s = '{"prop": "b=D:\\\\C"}' l = json.loads(s) print(l["prop"]) # 输出:b=D:\C
方式2:Python原始字符串+JSON规范转义
原始字符串(前缀r)会忽略Python的转义规则,直接保留\,但仍需遵循JSON规范,把单个\写成\\:
import json s = r'{"prop": "b=D:\\C"}' l = json.loads(s) print(l["prop"]) # 输出:b=D:\C
补充说明
如果你的原始数据源(比如本地文件、接口返回)中确实存在{"prop": "b=D:\C"}这类非标准JSON,需要先预处理,把\C替换为\\C,再进行JSON解码。
内容的提问来源于stack exchange,提问作者EinEsellesEniE
相关产品推荐
相关产品推荐

