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

Python中解析含嵌套引号类JSON字符串的问题求助

处理Python中含嵌套引号的类JSON字符串解析问题

先看你提供的问题字符串,它是带有HTML实体的类JSON格式,核心问题是text字段值里的"test"没有转义,导致JSON解析器无法识别:

{
  "text": "This is a "test" string",
  "another_key": "Another value"
}

(注:原字符串里的"是HTML转义后的双引号,先还原成普通引号更直观)

你之前写的函数有两个关键问题:

  • 错误地把"当成单个字符处理,但它实际是5个字符的序列,循环遍历单个字符时根本匹配不到这个实体
  • 转义逻辑混乱,没正确区分字符串内外的引号,导致转义后的字符串依然不符合JSON规范

正确的解决方案

我们需要分两步处理:

  1. 先把所有HTML实体"替换成普通双引号"
  2. 用状态机遍历字符串,给字符串内部的嵌套引号添加转义符\

完整代码如下:

import json

def fix_nested_quotes_and_parse(json_like_str):
    # 第一步:替换HTML实体为普通双引号
    raw_str = json_like_str.replace('"', '"')
    
    cleaned = []
    in_string = False
    for char in raw_str:
        if char == '"':
            if in_string:
                # 如果在字符串内部,给引号加转义
                cleaned.append('\\"')
            else:
                # 字符串外部的引号,直接添加
                cleaned.append(char)
            # 切换字符串状态
            in_string = not in_string
        else:
            cleaned.append(char)
    
    cleaned_str = ''.join(cleaned)
    try:
        return json.loads(cleaned_str), "转换成功"
    except json.JSONDecodeError as e:
        return None, f"转换失败:{str(e)}"

测试示例

用你提供的问题字符串测试:

problem_str = '''{
  "text": "This is a "test" string",
  "another_key": "Another value"
}'''

result, msg = fix_nested_quotes_and_parse(problem_str)
print(msg)
print(result)

输出结果:

转换成功
{'text': 'This is a "test" string', 'another_key': 'Another value'}

逻辑说明

  • 先替换HTML实体:把所有"转成",得到标准的类JSON结构
  • 状态机遍历:用in_string标记是否处于字符串内部,遇到引号时,如果在内部就添加转义符,否则直接保留,同时切换状态
  • 最后用json.loads解析处理后的字符串,得到正常的Python字典

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:23:14