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

Python处理含多余双引号的格式错误JSON解决方案咨询

修复含多余双引号的错误JSON格式(Python实现)

问题场景

需要处理一份存在多余双引号的错误JSON,无法从源头调整格式。使用json.loads()解析时触发JSONDecodeError,尝试benedict.from_yaml()同样失败,目标是将错误JSON修正为可正常解析的格式,得到符合预期的字典结构。

错误JSON示例

json_input='{"value_ok" : "ok", "empth" : """", "value_2" : ""text"", "value_3" : ""2022-01-01""}'

尝试过的方法及报错

尝试1:使用json.loads()解析

d = json.loads(json_input)

报错信息:

JSONDecodeError: Expecting ',' delimiter: line 1 column 33 (char 32)

尝试2:使用benedict.from_yaml()解析

d = benedict.from_yaml(json_input)

报错信息:

expected ',' or '}', but got '<scalar>'
  in "<unicode string>", line 1, column 33:
    {"value_ok" : "ok", "empth" : """", "value_2" : ""text"", "value ... 

解决方案:正则表达式替换多余双引号

针对该JSON的错误模式(值被额外包裹双引号、空值多写双引号),可以用正则表达式精准替换修正:

import re
import json

json_input='{"value_ok" : "ok", "empth" : """", "value_2" : ""text"", "value_3" : ""2022-01-01""}'

# 替换值部分的双层双引号:""xxx"" → "xxx"
fixed_json = re.sub(r'(?<=":\s*)""(.*?)""(?=\s*,|\s*})', r'"\1"', json_input)
# 替换空值的四层双引号:"""" → ""
fixed_json = re.sub(r'(?<=":\s*)""""(?=\s*,|\s*})', r'""', fixed_json)

# 验证解析结果
d = json.loads(fixed_json)
print(d)

执行结果

输出:

{'value_ok': 'ok', 'empth': '', 'value_2': 'text', 'value_3': '2022-01-01'}

正则说明

  • (?<=":\s*):正向断言,匹配字段名后的":及可能的空格,确保只处理字段值部分的双引号
  • ""(.*?)"":匹配被双层双引号包裹的内容,非贪婪模式避免匹配跨字段的内容
  • (?=\s*,|\s*}):正向断言,匹配值后的逗号或大括号,确保只替换单个字段值内的错误格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:55:44