JSON 标准规范

Json 有两个标准规范:RFC8259 和 ECMA-404。这两个标准规范在核心语法上完全相同,区别在于:

  1. 发行机构不同

    RFC8259 由 IETF(互联网工程任务组)发布,是互联网标准文档(Request for Comments)。它于2017年12月发布,取代了早期的 RFC 7159 等版本。

    ECMA-404 由 ECMA International(欧洲计算机制造商协会)发布,是国际技术标准。第一版发布于2013年10月,最新版本为第2版(2021年12月)。

  2. 内容侧重点不同

    RFC8259 更注重 JSON 在互联网传输中的应用,例如明确要求 JSON 文本必须以合法的 JSON 值(对象或数组)开头。还包含了对 JSON 解析器和生成器的实现建议(如字符编码、数值解析等)。强调 JSON 的互操作性和安全性(如避免数值解析的精度问题)。并且明确要求 JSON 文本必须使用 UTF-8 编码。

    ECMA-404 更偏向 JSON 的语法定义和抽象规范,不涉及具体实现细节或传输协议。内容更为简洁,仅描述 JSON 的语法结构和合法性规则,不限制实现方式。且未强制规定编码方式(允许 UTF-8/16/32),但实际实现通常遵循 RFC 8259 的 UTF-8 要求。

两者在语法规则上完全一致,开发者无需区分两者,实际应用中遵循任一标准均可。RFC 8259 更常用于互联网协议(如 HTTP API),而 ECMA-404 作为基础规范被编程语言和工具引用(如 ECMAScript 标准)。

JSON 语法

JSON文本是由标记序列组成的。标记集包括了六个结构字符、字符串、数值和三个字面常量标记。

结构字符

六个结构字符包括:

  • [ U+005B 左中括号
  • ] U+005D 右中括号
  • { U+007B 左大括号
  • } U+007D 右大括号
  • : U+003A 冒号
  • ; U+002C 逗号

字面常量标记

三个字面常量标记:

  • true U+0074 U+0072 U+0075 U+0065
  • false U+0066 U+0061 U+006C U+0073 U+0065
  • null U+006E U+0075 U+006C U+006C

JSON 值(value)

JSON 值有五种,分别是对象(object),列表(array),数值(number),字符串(string),和三个字面常量标记。

json_value.png

对象(object)

对象结构是通过大括号标记,里面包含零个或多个键值对的结构来表示的。键是一个字符串,后跟一个冒号,用来将键和值分隔开来。后面会通过逗号将不同的键值对分开。

json_object.png

列表(array)

列表结构是通过中括号标记,里面包含零个或多个值(value)来表示的。值的顺序很重要。

json_array.png

数值(number)

数值是不带前导零的十进制数字序列。它可能带一个负号 (U+002D) 作为前缀。后面可能是一个以小数点 (U+002E) 作为前缀的小数位。后可能会有一个以十为底数前缀为 e (U+0065) 或 E (U+0045) 前缀后可选择正号 (U+002B) 或负号 (U+002D) 的指数位。数字的码点为 U+0030 到 U+0039。

​不能使用不能表示为数字序列的数值,例如无穷大 Infinity 或 NaN。

json_number.png

字符串(string)

​字符串是通过双引号 (U+005C) 包裹的 Unicode 码点序列。除去必须转义的字符包括引号 (U+0022)、反斜杠 (U+005C) 和 U+0000 到 U+001F 的控制字符外,所有字符都可以放在引号内。某些字符由两个字符的转义序列表示。

转义序列 字符 Unicode码点
" 双引号 U+0022
\ 反斜杠 U+005C
\/ 斜杠符 U+002F
\b 退格符 U+0008
\f 换页符 U+000C
\n 换行符 U+000A
\r 回车符 U+000D
\t 制表符 U+0009

RFC8259 规范明确要求 JSON 文本必须使用 UTF-8 编码。ECMA-404 允许编码方式可以为 UTF-8/16/32,我们实际实现通常遵循 RFC 8259 的 UTF-8 要求。

json_string.png

JSON 在线解析

JSON 有多个在线解析网站:
Json.cn
JSON.cm
WeJSON

还有其它多个在线解析的网站,我们可以用任一网站来验证和解析 Json 格式。


参考
RFC8259
RFC8259 中文翻译
JSON 标准 ECMA-404 中文翻译