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

Python json.loads解析转义JSON字符串报错解决方案

问题原因与解决方法

根本原因

先讲清楚最容易混淆的点:Python字符串的r前缀没有任何特殊魔法,它只在你写代码定义字符串字面量的时候生效——作用是告诉解释器,别处理字符串里的反斜杠转义,把反斜杠当普通字符原样存下来。等代码跑起来,变量拿到的就是内存里存的字符序列,根本没有“把普通变量转成r原始字符串”这种操作。

你测试里两个字符串一个报错一个正常,原因特别简单:

  • 普通三引号写的a里,你输入的\"会被Python默认的转义逻辑处理成双引号",最后存到内存里的字符串中,HTML的href属性两边是没转义的裸双引号,直接把JSON的字符串结构拆坏了,json.loads当然会报错。
  • 加了r前缀的b里,\"会原封不动保留成\",刚好符合JSON要求的“字符串内部的双引号必须加反斜杠转义”的规则,所以能正常解析。

函数返回的var解析失败的修复方案

你调用somefunct()拿到的变量解析报错,和r前缀半毛钱关系都没有,纯粹是拿到的字符串本身不符合JSON格式,对应两种最常见的情况处理就行:

  • 情况1:字符串首尾多裹了一层引号
    你贴的print(var)输出首尾带单引号,很多人踩过这个坑:函数实际返回的是Python字符串的repr表示,不是原始JSON内容,等于在正常JSON外面多套了一层引号。先跑一句var = var.strip("'\"")把首尾多余的单引号、双引号都删掉,再解析试试。
  • 情况2:转义符被提前处理掉了
    这是90%的人遇到这个问题的根因:如果somefunct()是你自己写的,顺着逻辑往上查,看是不是在拿到原始响应之后,多做了一层不必要的反转义、解码操作,把JSON里本来应该保留的\"给转成了裸的"。正常来说,只要数据源返回的是标准JSON,你把拿到的原始字符串原封不动传给json.loads就不会出问题,别手贱加额外的字符串替换、转义处理。

你最后排查发现示例里的字符串没法直接复现是正常的,这类转义问题从来都不是json.loads的锅,往上游找哪一步改坏了原始字符串的结构,比在解析层瞎补转义靠谱得多。


内容的提问来源于stack exchange,提问作者fer0m

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:18:24