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

如何使用json.loads处理含转义字符的JSON字符串?加载报错解决

问题:无法加载包含转义双引号的JSON字符串

问题代码

import json
from json import loads

search = """
[{"text":"Dolores Keane - \"Craigie Hills\" (1982)"}]
"""
print(loads(search)) # 返回错误
print(search.replace('"',"'")) # 将所有双引号转为单引号,包括转义的和未转义的

问题详情

不知道如何将这类字符串加载为JSON格式。已经尝试了无数方法,比如使用repr(search)等,但都不起作用。

编辑补充:问题在于该字符串中同时存在用于表示字典键/值的双引号(")和作为字符串内容一部分的转义双引号(\"),无法正确区分二者并完成JSON加载。

目前已知两种思路:使用原始字符串、先dump再load。

报错信息

json.decoder.JSONDecodeError: Expecting ',' delimiter: line 2 column 28 (char 28)


解决方案

核心问题

你定义的三重引号字符串里,\"会被Python自动解析成单个双引号,而非JSON要求的转义双引号(\\")。实际传入json.loads()的内容是:

[{"text":"Dolores Keane - "Craigie Hills" (1982)"}]

这种情况下,JSON解析器会误以为字符串在Keane - 后就结束,后续内容语法错误,导致解码失败。

具体解决方法

  • 方法1:使用原始字符串
    在三重引号前加r,让Python保留字符串中的原始转义字符:

    import json
    
    search = r"""
    [{"text":"Dolores Keane - \"Craigie Hills\" (1982)"}]
    """
    print(json.loads(search))
    # 输出:[{'text': 'Dolores Keane - "Craigie Hills" (1982)'}]
    
  • 方法2:手动二次转义
    如果不能使用原始字符串,就把每个\再转义一次,确保JSON能识别转义的双引号:

    import json
    
    search = """
    [{"text":"Dolores Keane - \\"Craigie Hills\\" (1982)"}]
    """
    print(json.loads(search))
    # 输出同上
    
  • 方法3:先dump再load
    如果你是从Python对象生成字符串,先通过json.dumps()生成标准JSON格式,再加载:

    import json
    
    original_data = [{"text": 'Dolores Keane - "Craigie Hills" (1982)'}]
    search = json.dumps(original_data)
    print(json.loads(search))
    # 输出同上
    

注意事项

之前用replace('"', "'")的方法不可行,因为JSON要求键和值必须用双引号,替换后生成的单引号字符串不符合JSON语法规范。


内容的提问来源于stack exchange,提问作者Willem van Houten

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:05:53