JSON 的格式要点可以概括为:极致的严格。
虽然 JSON 看起来很像 JavaScript 的对象,但它的语法规则要严格得多。哪怕多写了一个逗号,或者少写了一个引号,整个解析都会报错(Crash)。
以下是 JSON 格式必须遵守的 6 大核心铁律:
1. 键(Key)必须用双引号
这是 JSON 和 JS 对象最大的区别,也是新手最容易犯的错。
- ❌ 错误:
{ name: "Alice" }(JS 写法) - ❌ 错误:
{ 'name': "Alice" }(单引号也不行) - ✅ 正确:
{ "name": "Alice" }
2. 字符串(String)必须用双引号
JSON 只有一种字符串引号,就是双引号 "。
- ❌ 错误:
"gender": 'male' - ✅ 正确:
"gender": "male"
3. 不允许“尾后逗号”(Trailing Comma)
在数组或对象的最后一项后面,绝对不能加逗号。
- ❌ 错误:
[1, 2, 3, ] - ❌ 错误:
{ "a": 1, "b": 2, } - ✅ 正确:
[1, 2, 3]
4. 极其“洁癖”的数据类型
JSON 只支持 6 种数据类型,不支持任何与“逻辑”或“动态”相关的内容。
支持的类型:
- String:
"abc" - Number:
123,3.14,-1(禁止前导零,如012) - Boolean:
true,false(必须小写) - Null:
null(必须小写) - Object:
{ ... } - Array:
[ ... ]
严厉禁止的类型(重点):
- ❌ Function: 不能传输函数。
- ❌ Undefined: 如果字段是
undefined,转换时会被直接丢弃(消失)。 - ❌ Date: 日期对象会被转成字符串(如
"2025-12-01T...")。 - ❌ NaN / Infinity: 会被转成
null。 - ❌ Symbol: 不支持。
5. 禁止注释
JSON 文件里不能写 // 或 /* */ 注释。
JSON 的设计者认为:数据就是数据,不需要解释。如果你需要注释,说明你的字段命名不够清晰,或者你应该把它写在文档里。
6. 文件结构必须封闭
一个合法的 JSON 文件(或字符串),最外层必须是一个 Object {} 或者一个 Array []。不能是一堆零散的键值对。
一张图看懂对比
| 特性 | JavaScript 对象 (JS Object) | JSON |
|---|---|---|
| 键名引号 | 可省略,可用单引号 | 必须双引号 |
| 字符串引号 | 单双引号、反引号均可 | 必须双引号 |
| 尾部逗号 | 允许 (兼容性好) | 严禁 |
| 注释 | 允许 | 严禁 |
| 值类型 | 函数、undefined、NaN、正则等 | 仅限 6 种基础数据 |
总结
你可以把 JSON 想象成 “被冷冻的、脱水的 JavaScript 对象”。
- 它去掉了所有的“活性成分”(函数、动态逻辑、注释)。
- 它规定了唯一的“包装格式”(双引号、无逗号)。
这种严格性正是它能成为跨语言通用标准的原因:因为它太简单、太死板了,所以 Python、Java、Go 解析起来没有任何歧义。