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

如何替换特定引号为撇号?修复JSON字符串适配json.loads

修复格式错误的JSON字符串

问题分析

原JSON字符串的核心问题是值字段"hammer 1.5""中存在未转义的多余双引号,违反JSON语法规范,导致json.loads无法解析。我们需要编写通用函数处理所有类似的未转义双引号场景。

通用解决方案

方案1:转义值中的未转义双引号(推荐)

该方案通过正则精准匹配值字段内的未转义双引号,添加反斜杠转义,严格符合JSON规范,适配所有值内出现未转义引号的场景:

import re
import json

def fix_malformed_json(raw_json_str):
    # 先将HTML实体"转换为普通双引号
    str_with_quotes = raw_json_str.replace('"', '"')
    # 正则匹配:值字段内(": "之后、", "或"}"之前)的未转义双引号
    pattern = re.compile(r'(?<=": ")([^"]*)"(?=[",}])')
    # 对匹配到的内容中的双引号进行转义
    def escape_quotes(match):
        return match.group(1).replace('"', '\\"') + '"'
    fixed_json = pattern.sub(escape_quotes, str_with_quotes)
    return fixed_json

# 测试示例
original_str = '{&quot;name&quot;: &quot;hammer 1.5&quot;&quot;, &quot;brand&quot;: &quot;Eurosteel&quot;}'
fixed_str = fix_malformed_json(original_str)
# 输出修正后的JSON字符串:{"name": "hammer 1.5\"", "brand": "Eurosteel"}
parsed_dict = json.loads(fixed_str)
print(parsed_dict)  # 输出: {'name': 'hammer 1.5"', 'brand': 'Eurosteel'}

方案2:合并连续双引号为单个(适用于连续多余引号场景)

如果多余的双引号是连续出现的,可直接替换连续双引号为单个,逻辑更简单:

import json

def fix_consecutive_quotes(raw_json_str):
    # 转换HTML实体并替换连续双引号
    fixed_str = raw_json_str.replace('&quot;', '"').replace('""', '"')
    return fixed_str

# 测试示例
original_str = '{&quot;name&quot;: &quot;hammer 1.5&quot;&quot;, &quot;brand&quot;: &quot;Eurosteel&quot;}'
fixed_str = fix_consecutive_quotes(original_str)
parsed_dict = json.loads(fixed_str)
print(parsed_dict)  # 输出: {'name': 'hammer 1.5"', 'brand': 'Eurosteel'}

方案对比

  • 方案1:通用性强,能处理值内任意位置的未转义双引号(非连续场景也适用),完全符合JSON语法规范。
  • 方案2:仅适用于多余引号连续出现的情况,处理逻辑简洁,但场景局限性大。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:30:16