修复 JSON 语法错误:7 个最常见的错误与 JSON 整理方法
API 响应、配置文件、日志——JSON 是开发者读得最多的数据格式。然而一个逗号或引号就可能引发 “Unexpected token” 错误。下面介绍如何快速找到原因。
基本规则
JSON(JavaScript Object Notation)是由 RFC 8259 和 ECMA-404 标准化的文本格式。它源自 JavaScript,如今几乎所有语言都支持。值的类型只有六种:字符串、数字、布尔值(true/false)、null、数组和对象。
对象在花括号中列出 "键": 值 对,数组在方括号中列出值,两者都用逗号分隔。键必须是用双引号括起来的字符串。正因为规则简单,所以很严格:在 JavaScript 代码中允许的写法,在 JSON 中可能就是错误。
{
"id": 1024,
"name": "AIBIZAP",
"active": true,
"tags": ["tools", "guides"],
"owner": null
}
导致解析错误的七个错误
查看错误信息所报位置的前面一点,原因几乎总是其中之一。把内容粘贴到 JSON 格式化工具中重新缩进,就能轻松找出出错的那一行。
- 末尾逗号:[1, 2, 3,] 是无效的。
- 单引号:要用 "name",不能用 'name'。
- 键没有引号:{name: "a"} 是 JavaScript 对象,不是 JSON。
- 注释:标准 JSON 不支持 // 或 /* */ 注释。
- 缺少转义:字符串中引号要写成 \",反斜杠写成 \\,换行写成 \n。直接写 C:\Users 这样的 Windows 路径会破坏文档。
- 特殊值:JSON 中没有 NaN、Infinity 和 undefined。缺失的值请用 null。
- BOM 和不可见字符:文件开头的 UTF-8 BOM,或复制时混入的不换行空格,可能导致在第一个字符就解析失败。
当心大数字和小数
JSON 标准没有限制数字大小,但 JavaScript 把所有数字都存为 64 位浮点数。大于 2^53(9,007,199,254,740,992)的整数无法精确表示,因此作为数字发送的长 ID 在浏览器中可能末尾几位被改变。
这类值应从一开始就以字符串发送,例如 "id": "1234567890123456789"。金额也有类似问题——浮点运算中 0.1 + 0.2 等于 0.30000000000000004——所以金额常以最小货币单位的整数或字符串发送。
JSON 没有日期类型
日期通常以 ISO 8601 字符串("2026-10-28T09:00:00Z")或 Unix 时间戳(1793178000)发送。推荐使用末尾带 Z(UTC)或明确偏移量(如 +08:00)的 ISO 8601,因为它易读且没有歧义。
像 "2026-10-28 09:00" 这样没有时区的值,会让接收方只能猜测它是服务器时间还是用户时间,从而导致相差好几个小时之类的错误。
格式化与压缩
加入缩进和换行能让 JSON 更易读;去掉所有空白则能减小传输体积。两者含义完全相同,所以调试时格式化,传输或存储时压缩。
配置文件等由人编辑的 JSON,最好以格式化后的形式纳入版本控制,便于审查改动。键的顺序没有意义,但对键排序会让差异对比清晰得多。
把 JSON 转换成代码和数据表
拿到 API 响应样例后,常常需要对应的 C#、Java、Python 或 TypeScript 类。手动抄写几十个字段容易出错;JSON 类生成器会根据样例推断类型并为你写出模型代码。
如果要把同样的数据存入数据库,JSON DDL 生成器可以起草 CREATE TABLE 语句。推断出的类型只基于样例中的值,因此定稿前请检查可空字段、字符串长度和主键。