本页所有内容有意放在一屏之内:JSON 语法足够简洁,完整参考不需要很长。 在线阅读,或 将同一参考下载为图片 离线保存或打印。

1. 结构
JSON 以对象 ({ }) 内的键值对或数组 ([ ]) 内的有序列表编写。键始终是 字符串。值可以是字符串、数字、布尔值、null、数组或另一个对象,根据数据 实际需要嵌套任意深度。
{
"name": "Ada",
"age": 36,
"active": true,
"skills": ["json", "css"],
"address": { "city": "London" },
"nickname": null
}
2. 语法规则
- 键和字符串值使用双引号。 单引号不是有效的 JSON。
- 冒号分隔每个键和它的值。
- 逗号分隔键值对和数组项,最后一项后面没有逗号。
- 数组是有序列表,值用逗号分隔。
- 没有注释。 标准 JSON 完全没有注释语法,既没有 // 也没有 #。
3. 数据类型
| 类型 | 示例 | 说明 |
|---|---|---|
| String | “hello” | 仅限双引号 |
| Number | 42, -3.14 | 无十六进制,无 NaN,无前导零 |
| Boolean | true, false | 小写,不加引号 |
| Null | null | 小写,不加引号 |
| Array | [“a”, 1, true] | 有序,允许混合类型 |
| Object | {“key”: “value”} | 键始终是字符串 |
JSON 数据类型详解 详细介绍每种类型, 包括那些会让解析器栽跟头的边缘情况。
4. 常用操作 (JavaScript)
JSON.parse(text) // 字符串 -> 值,无效 JSON 时抛出异常
JSON.stringify(value) // 值 -> 字符串
JSON.stringify(value, null, 2) // 美化打印,2 空格缩进
value.key // 解析后读取键
value.nested.key // 读取嵌套键
5. 示例
对象数组
[
{ "id": 1, "name": "Ada" },
{ "id": 2, "name": "Linus" }
]
嵌套对象
{ "user": { "id": 1, "verified": true } }
混合类型
{ "tags": ["a", "b"], "score": null, "live": false }
6. 最佳实践
- 使用有意义、一致的键名。
- 保持结构尽可能扁平。
- 解析自己未生成的输入前先验证 JSON。
- 列表使用数组,而不是带数字外观键的对象。
- 如果精确精度重要,将大整数作为字符串引起来;64 位 ID 在普通 JSON.parse 中可能四舍五入(参见 JSON 数据类型)。
- 显式处理解析错误。不要仅因为输入通常是有效 JSON 就假设它有效。
从这里往哪走
- 什么是 JSON?,本页的入门版本。
- JSON vs YAML 和 JSON vs XML, 当 JSON 不是正确格式时参考。
- JSON 格式化器 和 JSON 验证器,检查真实文档是否符合以上所有规则。