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

如何用正则表达式去除JSON中content字段值内的多余引号?

修复JSON中content字段值内的意外引号问题

搞定这个解析失败的问题核心是精准区分JSON结构引号和content字段值内的意外引号,不能误删结构本身的引号。下面给你一个实用的正则方案,附完整代码示例:

问题场景复现

先看一个典型的坏JSON例子——content值里的未转义双引号直接破坏了JSON结构:

{
  "id": 1,
  "content": "这段文本里有"意外"的引号,直接用json.loads会报错"
}

解决方案:正则定向清理

我们可以用正则精准匹配content字段的完整取值范围,然后单独清理值内的双引号,保留JSON结构的引号。

Python代码实现

import re
import json

# 你的有问题的JSON字符串
malformed_json = '''{
  "article_id": 123,
  "content": "用户输入的内容里有"多余"的双引号,导致JSON解析失败",
  "author": "test"
}'''

# 正则规则:精准定位content字段的取值范围
# 规则解释:
# - ("content": ") 捕获字段键和开头的引号,保留JSON结构部分
# - (.*?) 非贪婪匹配content的实际内容(支持换行)
# - (")(?=[,}]) 匹配结尾的引号,确保后面是JSON的分隔符(逗号或大括号)
pattern = r'("content": ")(.*?)(")(?=[,}])'

# 自定义替换函数:清理内容里的双引号
def clean_inner_quotes(match_obj):
    # 提取捕获的分组:结构前缀、原始内容、结构后缀引号
    prefix = match_obj.group(1)
    raw_content = match_obj.group(2)
    suffix = match_obj.group(3)
    # 删除内容里的所有双引号
    cleaned_content = raw_content.replace('"', '')
    # 拼接回合法的JSON片段
    return f'{prefix}{cleaned_content}{suffix}'

# 执行修复
fixed_json = re.sub(pattern, clean_inner_quotes, malformed_json, flags=re.DOTALL)

# 验证解析结果
try:
    parsed_data = json.loads(fixed_json)
    print("✅ JSON解析成功!")
    print("清理后的content内容:", parsed_data['content'])
except json.JSONDecodeError as e:
    print(f"❌ 解析失败,错误信息:{e}")

关键细节说明

  1. 非贪婪匹配.*?:确保我们不会把后面其他字段的结构引号误包含进来,只会匹配到当前content字段的结尾引号。
  2. re.DOTALL标志:让正则里的.可以匹配换行符,避免content值包含换行时匹配失败。
  3. 正向断言(?=[,}]):确保我们匹配的结尾引号是JSON结构的一部分,进一步提升匹配的精准度。

如果你的场景里content值内的意外引号是单引号(不过单引号不会导致JSON解析失败,因为JSON字符串默认用双引号),只需把替换逻辑里的'"'改成"'"即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:18:06