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

使用Python处理JSON值内双引号:修复无效JSON字符串问题

解决无效JSON字符串的双引号问题

嘿,这个问题我之前处理过,简直是JSON解析里的经典坑!咱们一步步来搞定它~

问题根源

你给出的JSON字符串{"name": "John"s Garage", "company": "ABC"}之所以无效,是因为值John"s Garage里的双引号没有转义——JSON语法要求字符串内部的双引号必须用反斜杠\转义,否则解析器会把这个双引号当成字符串的结束标记,直接报错。

而且要注意:在Python里直接写这个字符串的时候也会触发语法错误,所以得用三引号或者正确转义来表示这个无效的原始字符串(比如用'''{"name": "John"s Garage", "company": "ABC"}''')。

两种可行解决方案

方案1:转义值内的双引号(保留引号)

如果需要保留John"s里的双引号,我们可以用正则表达式精准匹配值内部的未转义双引号,给它们加上转义符:

import re
import json

# 正确表示无效的原始JSON字符串
bad_json = '''{"name": "John"s Garage", "company": "ABC"}'''

# 正则匹配值内的未转义双引号并转义
fixed_json = re.sub(r'(?<="[^"]*)"(?=[^"]*")', r'\"', bad_json)

# 验证解析结果
try:
    parsed_data = json.loads(fixed_json)
    print("解析成功!结果:", parsed_data)
    # 输出:解析成功!结果: {'name': 'John"s Garage', 'company': 'ABC'}
except json.JSONDecodeError as e:
    print("解析失败:", e)

正则表达式说明:

  • (?<="[^"]*):正向预查,确保目标双引号前面是一个边界双引号 + 任意非双引号字符
  • (?=[^"]*"):正向预查,确保目标双引号后面是任意非双引号字符 + 一个边界双引号
  • 这样就能精准定位到值内部的双引号,不会误改键值对的边界引号

方案2:移除值内的双引号(不需要保留引号)

如果不需要保留那个双引号,直接移除更简单,同样用正则匹配目标引号替换为空字符串:

import re
import json

bad_json = '''{"name": "John"s Garage", "company": "ABC"}'''

# 移除值内的未转义双引号
fixed_json = re.sub(r'(?<="[^"]*)"(?=[^"]*")', '', bad_json)

try:
    parsed_data = json.loads(fixed_json)
    print("解析成功!结果:", parsed_data)
    # 输出:解析成功!结果: {'name': 'Johns Garage', 'company': 'ABC'}
except json.JSONDecodeError as e:
    print("解析失败:", e)

扩展场景

如果你的JSON里有多个值内的双引号(比如{"name": "John"s "Best" Garage", "company": "ABC"}),上面的正则也能完美处理,会把所有值内部的未转义引号都转义/移除,生成有效的JSON。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:27:44