JSON 是 JavaScript Object Notation 的缩写。虽然名字来自 JavaScript,它是一种独立的数据交换格式;多种语言都能解析和生成 JSON。JSON 文本由对象、数组、字符串、数字、布尔值和 null 等值组成。

对象与键值对

对象用花括号包围,由零个或多个键值对组成。键必须是双引号包围的字符串,键和值之间用冒号分隔,多个成员用逗号分隔:

{
  "title": "学习笔记",
  "published": true,
  "tags": ["HTTP", "基础"]
}

上例包含字符串、布尔值和数组。对象成员的顺序不应被应用程序当成业务含义,除非相关规范另有约定。

数组与可用值

数组用方括号表示,元素之间用逗号分隔;元素可以是不同类型的 JSON 值,也可以嵌套对象或数组。合法值包括对象、数组、字符串、数字、true、false 和 null。

容易忽略的语法规则

  • 字符串必须使用双引号,不能写成单引号。
  • 对象键也必须使用双引号。
  • 成员与元素之间用逗号分隔,但最后一项后通常不能多写逗号。
  • 数字不能带前导加号或无意义的前导零;JSON 不支持 NaN 和 Infinity。

例如 {'name':'Ada'} 不是合法 JSON;改为 {"name":"Ada"} 才符合标准语法。

读写时的实用步骤

  1. 先确认数据最外层是对象还是数组。
  2. 检查键的拼写和大小写,JSON 的键是字符串。
  3. 检查每个值的类型,不要把数字字符串自动当成数字。
  4. 使用语言自带的 JSON 解析器,并对解析失败做好处理。

HTTP 接口返回 JSON 时,通常还会通过 Content-Type: application/json 标明媒体类型。格式正确不代表数据内容符合应用预期,程序仍需检查必需字段与取值范围。

参考资料