常见的 JSON 错误及其修复方法
作者 DevFormatLab·8 分钟阅读
JSON调试JavaScript教程
JSON(JavaScript 对象表示法)无处不在——API、配置文件、NoSQL 数据库、数据交换。但当它出错时,错误信息可能很难理解。本指南详细介绍最常见的 JSON 错误及其精确修复方法。
1. SyntaxError: Unexpected token(意外的符号)
这是最常见的 JSON 错误。意味着解析器在该位置遇到了无法解析的字符。
常见原因:
- 尾部逗号:
{"name": "Alice",}— "Alice" 后面的逗号在 JSON 中是无效的(即使 JS 能接受) - 单引号:JSON 要求使用双引号:
{'name': 'Alice'}无效。必须是{"name": "Alice"} - 未加引号的键名:
{name: "Alice"}— JSON 的键必须加引号 - 注释:JSON 不支持
//或/* */注释
如何修复:
将你的 JSON 粘贴到我们的 JSON 格式化工具 — 它会直接指向错误发生的行和列。错误信息中的字符偏移量通常是准确的。
2. SyntaxError: Unterminated string(未终止的字符串)
字符串字面量没有正确闭合。解析器在寻找结束引号的过程中到达了输入末尾。
常见原因:
- 缺少结束引号:
{"name": "Alice} - 字符串内未转义的引号:
{"quote": "He said \"hello\""} - 字符串内换行:JSON 字符串不能跨多行,除非你将换行符转义
如何修复:
查看错误报告的位置。实际错误往往就在该位置之前。我们的 JSON 格式化工具会高亮显示未终止区域。
3. SyntaxError: Unexpected end of JSON input(JSON 输入意外结束)
在 JSON 结构完成之前,解析器就到达了文件末尾。
常见原因:
- 被截断的网络响应(传输过程中连接中断)
- 缺少闭合的大括号/中括号:
{"users": [{"name": "Alice"}— 缺少闭合括号 - 文件写入不完整
如何修复:
数一下你的开括号和闭括号数量。一个好的策略是正确缩进,然后检查缩进是否有意义。我们格式化工具的树视图会显示结构在何处过早终止。
4. ReferenceError: xxx is not defined(xxx 未定义)
当你尝试在 JavaScript 中直接使用 JSON 而没有将其作为字符串引用时,会发生这种情况。
// ❌ 错误 — 解析器看到的是字面的大括号,而不是字符串
const data = JSON.parse({"name": "Alice"});
// ✅ 正确 — 传入字符串
const data = JSON.parse('{"name": "Alice"}');
如何修复:
记住:JSON.parse() 接受一个包含 JSON 的字符串。如果你要将 JSON 粘贴到 JS 源码中,需要外层引号,并且内部引号要转义。我们的 JSON → String 工具 会自动处理。
5. 数字带前导零
除非数字恰好是 "0",否则 JSON 不允许数字上有前导零。
{"count": 042}→ 无效{"count": 42}→ ✓ 有效{"count": "042"}→ ✓ 有效(它是字符串)
6. 无效的转义序列
JSON 只识别这些转义序列:\", \\, \/, \\b, \\f, \\n, \\r, \\t, \\uXXXX 等。其他如 \e 或 \x1B 都是无效的。
调试 JSON 的专业技巧
- 先用格式化工具 — 粘贴到我们的 JSON 格式化工具中,获取精确的行/列位置
- 从外向内工作 — 在调试内部对象之前,先检查最外层结构是否正确闭合
- 增量验证 — 如果你有一个大的 JSON 文件,删除部分内容并重新验证,以隔离出包含错误的部分
- 与有效 JSON 进行比对 — 使用 JSON 比对工具 将你的畸形 JSON 与已知正确的模板进行比较
JSON 验证通过但仍不起作用时
有时 JSON 在语法上是有效的,但在语义上是错误的。例如:
- 字符串与数字不匹配:
"42"vs42— API 期望数字但得到了字符串 - Null 与 undefined:JSON 有
null,没有undefined— 省略一个键与将其设置为 null 是不同的 - 大小写敏感:
"Username"vs"username"— JSON 键是区分大小写的
对于这些情况,使用我们的 JSON 比对工具并排比较你的负载与工作示例。
本文中提到的所有工具都 100% 在你的浏览器中运行——你的数据永远不会离开你的设备。调试愉快!