JSON 语法
这是什么:JSON 的语法 = 写 JSON 必须遵守的规矩:值只有六种类型,外加「键必须双引号」「不许尾逗号、不许注释」两条铁律。
为什么用:JSON 是机器严格执行的格式,多一个逗号、少一对引号就整个解析失败。先把规矩背牢,能避开 90% 的报错(剩下的 10% 交给第 5 章的排错术)。
如何用:每条规则都配一个 ✅ 合法 和一个 ❌ 非法的对照示例,照着写就对了。
六种值类型
JSON 的值只有下面六种,没有第七种:
{
"string": "文字,必须双引号",
"number": 3.14,
"booleanTrue": true,
"booleanFalse": false,
"null": null,
"array": [1, "two", true],
"object": { "city": "池塘镇" }
}
等等,这是七行?——数一数类型:字符串、数字、布尔、null、数组、对象,正好六种(数组里放了三种类型,是想说明数组元素不必同类型)。
| 类型 | 写法 | 注意 |
|---|---|---|
| 字符串 | "青蛙" |
只能双引号,单引号非法 |
| 数字 | 3、-2、3.14、2e3 |
不用引号;不写八进制十六进制 |
| 布尔 | true / false |
全小写,True、TRUE 都非法 |
| 空值 | null |
全小写;JS 的 undefined 在 JSON 里不存在 |
| 数组 | [] |
元素用逗号隔开,类型可混 |
| 对象 | {} |
键必须双引号字符串 |
铁律一:键必须双引号
✅ { "name": "呱小吉" }
❌ { name: "呱小吉" }
❌ { 'name': "呱小吉" }
键不写引号是 JS 对象的写法,JSON 不认;单引号也不行,只有双引号是合法的。这是 JSON 和 JS 对象最大的区别,也是新手第一大坑。
铁律二:不许尾逗号、不许注释
✅ { "a": 1, "b": 2 }
❌ { "a": 1, "b": 2, }
❌ { "a": 1, /* 备注 */ "b": 2 }
- 每个「值」后面跟的逗号,后面必须还有内容;最后一个成员后面绝不能有逗号(尾逗号)
- JSON 里没有注释这回事——想写说明,就加一个键,比如
"note": "此字段已废弃"
对象和数组可以互相嵌套
{
"class": "蛙一班",
"students": [
{ "name": "呱小吉", "age": 3 },
{ "name": "蛙大壮", "age": 4 }
]
}
对象里放数组(students),数组里再放对象(每个学生),一层套一层就构成了真实世界的数据。怎么优雅地取深层值,第 4 章专门讲。
怎么验证我写对了没有
最简单的办法:打开浏览器控制台(F12),用 JSON.parse() 试一下——合法就返回对象,非法就报错(报错怎么看,第 5 章教):
JSON.parse('{ "name": "呱小吉" }') // ✅ 返回 {name: '呱小吉'}
JSON.parse("{ name: '呱小吉' }") // ❌ 报错,单引号 + 键没双引号
记忆口诀:键要双引号,值看六类型;逗号别多写,注释不存在的。
📝 本章小结
- 六种值类型:字符串(双引号)、数字、布尔(小写)、null、数组、对象
- 铁律一:键必须双引号,单引号、无引号都非法
- 铁律二:不许尾逗号、不许注释
- 对象数组可无限嵌套;
JSON.parse()一试便知合法与否
动手改
- 写一份你的个人名片 JSON:姓名、年龄、三个爱好(数组)、是否养宠物(布尔)
- 故意写一处尾逗号,用
JSON.parse()看看报什么错 - 把爱好数组里再加一个对象:
{ "hobby": "游泳", "years": 2 }