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
相关产品推荐
相关产品推荐

