json.loads()解析含尾随逗号的字符串会报JSONDecodeError;可用ast.literal_eval()、正则预处理、json5或demjson3库解决。

如果您使用 Python 的 json.loads() 解析包含尾随逗号的字符串(如 {"a": 1,}),会触发 JSONDecodeError,因为标准 JSON 规范不允许尾随逗号。以下是多种绕过该限制的方法:
一、使用 ast.literal_eval() 替代
当输入字符串格式接近 Python 字面量(如字典、列表)且仅含尾随逗号等轻微非 JSON 语法时,ast.literal_eval() 可安全解析,它支持 Python 语法而非严格 JSON。
1、导入 ast 模块:import ast。
2、调用 ast.literal_eval() 并传入字符串:ast.literal_eval('{"key": "value",}') 。
立即学习“Python免费学习笔记(深入)”;
3、确保输入不含不可信代码,因该函数仅限字面量,不执行任意表达式。
二、预处理字符串:移除尾随逗号
通过正则表达式识别并删除对象和数组末尾的逗号,使字符串符合 JSON 标准后再交由 json.loads() 解析。
1、导入 re 和 json 模块:import re, json。
2、定义清理函数,匹配 {... ,} 和 [... ,] 模式并替换为空格或空字符串:cleaned = re.sub(r',\s*([}\]])', r'\1', raw_str)。
3、对 cleaned 字符串调用 json.loads(cleaned)。
三、使用第三方库 json5
json5 是一个兼容 JSON5 规范的解析器,原生支持尾随逗号、单引号、注释等扩展特性,语义与 JSON 高度一致。
1、安装库:pip install json5。
2、导入 json5:import json5。
3、直接调用 json5.loads() 解析含尾随逗号的字符串:json5.loads('{"x": 1,}') 。
四、使用 demjson3 库
demjson3 是一个高容错 JSON 解析器,支持宽松模式,能自动修复包括尾随逗号在内的多种常见语法错误。
1、安装库:pip install demjson3。
2、导入 demjson3:import demjson3。
3、调用 demjson3.decode() 并启用宽松模式:demjson3.decode(raw_str, strict=False)。










