You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python解析含特殊字符的JSON失败,如何转为原始字符串解析?

解决JSON解析时的转义问题

首先得明确一个关键点:Python里的原始字符串(r"")只是写代码时的语法糖,它并不是一种特殊的字符串类型——不管你用普通字面量还是原始字面量定义字符串,最终得到的字符串对象是完全一样的。所以不存在“让Python自动把字符串当作原始字符串处理”的说法,原始字符串只是帮你在写代码时避免手动转义反斜杠而已。

为什么用r""""包裹就能解析?

你遇到的情况,本质是当你把捕获到的JSON字符串直接作为普通字符串字面量写进代码时,Python会提前解析其中的转义字符(比如把\"变成"),导致传入json.loads()的字符串已经不是原始的、符合JSON规范的内容了。而用原始字面量的话,Python不会解析这些转义,所以传入的是正确的JSON格式,自然能成功解析。

但你是从HTTP请求捕获的字符串,运行时这个字符串已经是一个Python字符串对象了,这时候问题出在:这个字符串对象里的转义字符已经被错误处理过了(比如被多转义一次,或者转义丢失)。

解决方法

  1. 先排查字符串的真实内容
    先打印出你捕获到的字符串的原始表示,用repr(raw_json_str)查看,这样能清楚看到字符串里实际的转义情况:

    raw_json_str = "你捕获的字符串"
    print(repr(raw_json_str))
    

    比如正确的JSON应该是{"key": "value \"test\""},那么repr()的输出应该是'{"key": "value \\"test\\""}',这时候json.loads()就能正常解析。如果输出是'{"key": "value "test""}',说明转义已经丢失,导致JSON里的字符串未闭合,这就是报错的原因。

  2. 从源头正确获取数据
    如果你是用HTTP库(比如requests)获取亚马逊的请求响应,直接用库自带的JSON解析方法最可靠,它会自动处理原始字节的转义问题:

    import requests
    response = requests.get("你的亚马逊请求URL")
    data = response.json()  # 直接用这个方法,比手动json.loads更稳妥
    

    或者用原始字节流解析:

    data = json.loads(response.content)
    

    response.content是未经过Unicode解码的原始字节,能避免解码过程中丢失转义信息。

  3. 修复已错误转义的字符串
    如果你的字符串确实已经被错误转义(比如转义丢失),可以尝试用unicode_escape编码还原:

    fixed_str = raw_json_str.encode('utf-8').decode('unicode_escape')
    data = json.loads(fixed_str)
    

    这个操作会把字符串里的转义序列还原成JSON能识别的格式,比如把丢失的转义引号重新补回来。

  4. 别乱替换反斜杠
    你之前试过的.replace("\\", "\\\\")和.escape("string_escape")反而会帮倒忙——它们会把单个反斜杠变成两个,导致JSON里的转义变成双重转义,让解析器更无法识别。

内容的提问来源于stack exchange,提问作者alive-and-well

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:59:17