JSON 格式化常见错误:10 个你一定踩过的坑
JSON 前端 开发者工具
JSON 格式化常见错误:10 个你一定踩过的坑
后端返回的 JSON 解析失败,浏览器控制台一堆红色错误,但肉眼看不出问题在哪。本文列了 10 个最常见的 JSON 解析失败原因,每个都附修复示例和验证方法。
想在线验证 JSON?打开 RuMystic JSON 格式化工具 — 粘贴即报错位置,本地处理不上传。
1. 尾随逗号
{
"name": "RuMystic",
"tools": 39,
}
最后一项后面多了个逗号。Python json.loads 报 Expecting property name enclosed in double quotes,JS JSON.parse 报 Unexpected token }。
修复:删掉尾逗号。
{
"name": "RuMystic",
"tools": 39
}
注意:JSON5 和 JSONC 允许尾逗号,但标准 JSON 不允许。
2. 单引号字符串
{
'name': 'RuMystic'
}
JSON 只允许双引号。这是从 JavaScript 字面量复制粘贴时最常见的坑。
修复:把所有单引号换成双引号。
{
"name": "RuMystic"
}
3. 注释
{
// 这是配置
"name": "RuMystic"
}
JSON 不支持注释。这是 Crockford 当年故意去掉的。
修复:要么删掉注释,要么用 JSONC/JSON5(需要对应解析器),要么把注释放到一个字段里。
{
"_comment": "这是配置",
"name": "RuMystic"
}
4. 键名未加引号
{
name: "RuMystic",
version: 1
}
JSON 要求所有键名必须用双引号。JavaScript 对象字面量允许不加,但 JSON 不行。
修复:
{
"name": "RuMystic",
"version": 1
}
5. 特殊字符未转义
{
"path": "C:\Users\Zen\file.txt",
"regex": "\d+"
}
JSON 字符串中 \ 必须转义为 \\。常见出错位置:Windows 路径、正则表达式。
修复:
{
"path": "C:\\Users\\Zen\\file.txt",
"regex": "\\d+"
}
JSON 字符串必须转义的字符:
\"双引号\\反斜杠\/斜杠(可选,但建议)\b退格\f换页\n换行\r回车\t制表符\uXXXXUnicode
6. 字符串里有未转义的换行
{
"description": "第一行
第二行"
}
JSON 字符串不能跨行。换行必须用 \n。
修复:
{
"description": "第一行\n第二行"
}
7. 数字格式错误
{
"hex": 0xFF,
"leading-dot": .5,
"plus": +42,
"nan": NaN,
"infinity": Infinity
}
JSON 数字只能是十进制,不能有前导点、前导加号、十六进制、NaN、Infinity。
修复:
{
"hex": 255,
"leading-dot": 0.5,
"plus": 42,
"nan": null,
"infinity": null
}
8. 用了 JavaScript 字面量
{
"created": new Date(),
"regex": /pattern/g,
"func": function() { return 1; },
"undefined": undefined
}
JSON 不支持任何 JavaScript 表达式,包括 Date 对象、正则字面量、函数、undefined。
修复:全部转成字符串或 null。
{
"created": "2026-07-01T00:00:00.000Z",
"regex": "/pattern/g",
"func": null,
"undefined": null
}
9. BOM 头
文件以 \uFEFF 开头(UTF-8 BOM)。部分编辑器默认加 BOM,导致 JSON.parse 报 Unexpected token \uFEFF。
修复:用编辑器另存为「UTF-8 无 BOM」。或者代码里先 strip:
const json = raw.replace(/^\uFEFF/, '');
const data = JSON.parse(json);
10. 编码不一致
文件存成 GBK 或 Latin-1,但解析器按 UTF-8 读。中文变乱码,可能报解析错误。
修复:所有 JSON 文件统一存 UTF-8 无 BOM。
快速排查流程
JSON.parse 的报错通常带位置,但位置可能偏移 1-2 个字符。工具推荐
- 在线验证:RuMystic JSON 格式化 — 本地处理,敏感数据不离开浏览器
- 命令行:
python -m json.tool file.json或jq . file.json - 编辑器:VS Code 自带 JSON 验证,红色波浪线标错
总结
10 个坑里有 8 个是「JavaScript 习惯」带到 JSON 的。记住一条:JSON 是 JSON,不是 JavaScript。键名加双引号、值不能是表达式、不能有注释、不能有尾逗号。
剩下的两个(BOM 和编码)是文件层面的,编辑器设置对一次就再也不踩。
下次遇到 JSON 解析失败,先丢到 RuMystic JSON 格式化 里跑一遍,5 秒定位问题。