Python中解析含嵌套引号类JSON字符串的问题求助
处理Python中含嵌套引号的类JSON字符串解析问题
先看你提供的问题字符串,它是带有HTML实体的类JSON格式,核心问题是text字段值里的"test"没有转义,导致JSON解析器无法识别:
{ "text": "This is a "test" string", "another_key": "Another value" }
(注:原字符串里的"是HTML转义后的双引号,先还原成普通引号更直观)
你之前写的函数有两个关键问题:
- 错误地把
"当成单个字符处理,但它实际是5个字符的序列,循环遍历单个字符时根本匹配不到这个实体 - 转义逻辑混乱,没正确区分字符串内外的引号,导致转义后的字符串依然不符合JSON规范
正确的解决方案
我们需要分两步处理:
- 先把所有HTML实体
"替换成普通双引号" - 用状态机遍历字符串,给字符串内部的嵌套引号添加转义符
\
完整代码如下:
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
相关产品推荐
相关产品推荐

