核心答案:JSON 六条铁律——键必须双引号、字符串必须双引号、不允许尾随逗号、不允许注释、值只能是 6 种类型(字符串/数字/布尔/null/对象/数组)、undefined 和函数不允许。90% 的解析错误源于前五条。

JSON 六条铁律

规则正确错误
键双引号{"a":1}{a:1}
字符串双引号"hi"'hi'
无尾随逗号[1,2][1,2,]
无注释{"a":1 /*x*/}
合法值true/null/123undefined/NaN
顶层类型对象或数组(老标准)

五大常见错误与修复

1. 单引号:{'name':'Tom'} → {"name":"Tom"}

2. 尾随逗号:从 JS 对象复制过来的数据最常见——删除最后一个元素后的逗号

3. 未转义的引号:"他说"你好"" → "他说\"你好\""(内层双引号加反斜杠)

4. 多余逗号/缺逗号:逐项检查相邻元素间的逗号数量

5. 非法值:JS 对象里的 undefined、function、Date 对象不能直接 JSON.stringify 后跨语言使用

格式化与压缩

操作效果场景
格式化(2 空格缩进)体积 +10-30%开发调试、配置文件
压缩(去空白)体积最小生产传输、存储

JS:JSON.stringify(obj, null, 2) 格式化;JSON.stringify(obj) 压缩。

JSON 与 JS 对象的区别

特性JSONJS 对象
必须双引号可裸写
字符串双引号单双均可
尾随逗号禁止允许
注释禁止允许
函数/undefined禁止允许
日期只能字符串Date 对象

常见误区

  1. 把 JS 对象当 JSON 发:后端收到 {a:1} 报错——先 JSON.stringify。
  2. 大数精度丢失:JSON 数字超 2⁵³ 会失真,Long 型 ID 应传字符串。
  3. 循环引用 stringify:对象互相引用会抛 TypeError,先解环。
  4. 特殊字符不转义:换行要 \n、反斜杠要 \\,直接放原始字符破坏结构。

用[JSON 格式化工具](/c/dev/json-format)一键校验、格式化并定位错误行。