JSON标准及语法介绍
JSON 标准规范
Json 有两个标准规范:RFC8259 和 ECMA-404。这两个标准规范在核心语法上完全相同,区别在于:
-
发行机构不同
RFC8259 由 IETF(互联网工程任务组)发布,是互联网标准文档(Request for Comments)。它于2017年12月发布,取代了早期的 RFC 7159 等版本。
ECMA-404 由 ECMA International(欧洲计算机制造商协会)发布,是国际技术标准。第一版发布于2013年10月,最新版本为第2版(2021年12月)。
-
内容侧重点不同
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),和三个字面常量标记。
对象(object)
对象结构是通过大括号标记,里面包含零个或多个键值对的结构来表示的。键是一个字符串,后跟一个冒号,用来将键和值分隔开来。后面会通过逗号将不同的键值对分开。
列表(array)
列表结构是通过中括号标记,里面包含零个或多个值(value)来表示的。值的顺序很重要。
数值(number)
数值是不带前导零的十进制数字序列。它可能带一个负号 (U+002D) 作为前缀。后面可能是一个以小数点 (U+002E) 作为前缀的小数位。后可能会有一个以十为底数前缀为 e (U+0065) 或 E (U+0045) 前缀后可选择正号 (U+002B) 或负号 (U+002D) 的指数位。数字的码点为 U+0030 到 U+0039。
不能使用不能表示为数字序列的数值,例如无穷大 Infinity 或 NaN。
字符串(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 在线解析
JSON 有多个在线解析网站:
Json.cn
JSON.cm
WeJSON
还有其它多个在线解析的网站,我们可以用任一网站来验证和解析 Json 格式。
- 版权声明: