如何用Python正则处理JSON字符串中的嵌套双引号问题?
解决生成式AI返回JSON的语法错误问题
一、针对性正则修复方案
针对值内未转义的双引号问题,可以通过精准正则匹配,仅替换键值对中值部分的双引号,避免影响键的合法双引号,同时兼容值内包含逗号的场景:
替换为单引号的实现
import re def fix_json_quotes(json_str): # 匹配值范围内的未转义双引号,替换为单引号 pattern = r'(?<=:"[^"]*)"(?=[^"]*")' fixed_str = re.sub(pattern, "'", json_str) # 清理值末尾的多余双引号(如示例中的"") fixed_str = re.sub(r'""(?=,|})', '"', fixed_str) return fixed_str # 测试示例 original_json = '{"test":"this is "test" of "a" test"","result":"your result is "out" in our website"}' fixed_json = fix_json_quotes(original_json) # 输出:{"test":"this is 'test' of 'a' test","result":"your result is 'out' in our website"}
转义双引号(符合JSON规范)
如果希望保留双引号并按JSON要求转义,可修改正则:
def escape_json_quotes(json_str): pattern = r'(?<=:"[^"]*)"(?=[^"]*")' fixed_str = re.sub(pattern, r'\\"', json_str) fixed_str = re.sub(r'""(?=,|})', '"', fixed_str) return fixed_str # 输出:{"test":"this is \"test\" of \"a\" test","result":"your result is \"out\" in our website"}
二、Python JSON清洗工具库
对于嵌套结构、换行等复杂场景,正则覆盖有限,可使用成熟的第三方库自动修复:
- dirtyjson:专门处理不规范JSON,自动识别并修复未转义引号、缺失逗号等问题
import dirtyjson broken_json = '{"test":"this is "test" of "a" test"","result":"your result is "out" in our website"}' data = dirtyjson.loads(broken_json) # 直接得到解析后的字典 print(data) - jsonrepair:轻量级修复库,支持多种JSON语法错误的自动修正
from jsonrepair import repair_json import json fixed_json = repair_json(broken_json) data = json.loads(fixed_json) - demjson:集成lint与修复功能,可输出修复后的合法JSON字符串
import demjson data = demjson.decode(broken_json, strict=False) fixed_json = demjson.encode(data)
三、AI工具端源头优化
从输出环节减少错误,比事后修复更高效:
- 明确提示词要求:在提问中强制模型输出严格符合RFC 8259标准的JSON,例如:
请严格以合法JSON格式返回结果,所有字符串内的双引号必须转义,不得出现语法错误 - 使用模型结构化输出参数:如OpenAI GPT系列支持
response_format={"type": "json_object"},Anthropic Claude支持response_format="json",强制模型输出合法JSON - 选用结构化输出模型:部分专门优化过结构化数据生成的模型(如GPT-4 Turbo),能大幅降低JSON语法错误率
内容的提问来源于stack exchange,提问作者ashap551
相关产品推荐
相关产品推荐

