跳转到主要内容
CuteJSON
↑↓ 导航 Enter 选择 Esc 关闭

什么是JSON? JavaScript Object Notation 入门指南

发布 1 分钟阅读 作者 Akash Kinkar Pandey

JSON,JavaScript Object Notation,是一种用于表示结构化数据的文本格式: 对象、列表、字符串、数字、布尔值和一个空值,语法足够小巧一下午就能读懂, 又足够严格让所有语言以相同方式解析。尽管名字里有 JavaScript,但它并不 绑定 JavaScript。每种主流语言都在标准库中内置了 JSON 解析器,或者一行命令 就能安装,这才是它真正胜出的原因:不是因为它优雅,而是因为它无聊且可移植。

它长什么样

{
  "name": "Ada Lovelace",
  "age": 36,
  "isEmployed": true,
  "skills": ["mathematics", "writing"],
  "address": { "city": "London", "country": "UK" },
  "nickname": null
}

对象是 { } 包含键值对,数组是 [ ] 包含有序列表,其余一切都嵌套在 这两个容器内。这就是 JSON 的全部形态:两种容器类型和几种值类型。

六种值类型,不多不少

JSON 值是字符串、数字、布尔值(true 或 false)、null、数组或 对象。规范中不存在其他任何类型。没有日期类型,没有 undefined,没有注释 语法,也没有表示函数的方式。日期变成双方商定格式的字符串(通常是 ISO 8601),JavaScript 中 undefined 的值直接从对象中省略而不是写出来。 JSON 数据类型详解 更详细地介绍每种类型,包括 那些会让 naive 解析器栽跟头的边缘情况。

为什么它在大多数 API 中取代了 XML

XML 将每个值包裹在开闭标签中,还支持属性,需要单独的模式语言来描述 什么是有效的。JSON 的容器各两个字符,值自带类型无需标签,文档的形状 反映程序实际使用的数据结构;将 JSON 文档解析为语言的原生对象字面量 几乎是直接复制,而 XML 文档通常需要在上面翻译自己的对象模型。这是 负载大小和解析成本上可衡量的真实差异,这就是 REST API 在 JSON 存在后 就稳定使用它的原因。参见 JSON vs XML 更近距离、 更具体的比较。

你实际会遇到它的地方

  • REST API 响应和请求。 Content-Type: application/json 请求体的 主导格式,双向都是。
  • 配置文件。 package.json、tsconfig.json 和大多数现代工具配置, 虽然 YAML 在这里也很常见;参见 JSON vs YAML 了解何时使用哪种更好。
  • NoSQL 和文档数据库。 MongoDB 文档以 BSON 存储,是 JSON 的二进制 超集,大多数文档数据库直接接受和返回 JSON。
  • 日志行和数据管道,每行一个 JSON 对象,通常称为 NDJSON 格式。 常见 JSON 用例 用实际形状介绍这个和其他。
  • 浏览器存储。 localStorage 只存储字符串,所以任何结构化数据 进入时经过 JSON.stringify,出来时经过 JSON.parse。

使用方法

将文档粘贴到 JSON 格式化器 中格式化, 或粘贴到 JSON 验证器 中根据规范检查, 会精确指出出错的行列位置。两者都不会上传你粘贴的内容;完全在浏览器中 运行。基础掌握后,JSON 速查表 是一页的语法 规则参考,值得在标签页中打开或下载离线参考。

返回所有文章