跳到主要内容

1. 引言

JavaScript Object Notation (JSON) 是一种用于序列化结构化数据的文本格式. 它源自 JavaScript 的对象字面量, 如 ECMAScript Programming Language Standard, Third Edition [ECMA-262] 中所定义.

JSON 可以表示四种原始类型 (字符串、数字、布尔值和 null) 以及两种结构化类型 (对象和数组).

字符串 是由零个或多个 Unicode 字符组成的序列 [UNICODE]. 注意, 该引用指向 Unicode 的最新版本, 而非某个特定发布版. 预期 Unicode 规范的未来变更不会影响 JSON 语法.

对象 是零个或多个名称/值对的无序集合, 其中名称是字符串, 值可以是字符串、数字、布尔值、null、对象或数组.

数组 是零个或多个值的有序序列.

术语 "object" 和 "array" 来自 JavaScript 的约定.

JSON 的设计目标是最小化、可移植、文本化, 并作为 JavaScript 的子集.

1.1. 本文档使用的约定

本文档中的关键词 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY" 和 "OPTIONAL" 只有在以此处所示的全大写形式出现时, 才应按 BCP 14 [RFC2119] [RFC8174] 中的说明进行解释.

本文档中的语法规则应按 [RFC5234] 中的说明进行解释.

1.2. JSON 规范

本文档取代 [RFC7159]. [RFC7159] 废弃了 [RFC4627], 后者最初描述了 JSON 并注册了媒体类型 "application/json".

JSON 也在 [ECMA-404] 中描述.

上一句中对 ECMA-404 的引用是规范性的, 但并不是通常意义上要求实现者必须查阅它才能理解本文档, 而是为了强调在任一规范中术语 "JSON text" 的定义都不存在不一致. 但是请注意, ECMA-404 允许若干做法, 而本规范为了最大化互操作性建议避免这些做法.

其意图是两个文档中的语法相同, 尽管使用了不同描述. 如果发现二者之间存在差异, ECMA 和 IETF 将共同更新两个文档.

如果在任一文档中发现错误, 应检查另一文档是否存在类似错误; 如果存在, 应尽可能予以修复.

如果未来任一文档发生变更, ECMA 和 IETF 将共同确保两个文档在变更过程中保持一致.

1.3. 本次修订简介

自 RFC 4627 发布以来的多年中, JSON 得到了非常广泛的使用. 这些经验揭示了某些模式, 虽然其规范允许这些模式, 但它们已经造成了互操作性问题.

此外, 关于 RFC 4627 已报告少量勘误 (见 RFC Errata ID 607 [Err607] 和 3607 [Err3607]), 关于 RFC 7159 也已报告少量勘误 (见 RFC Errata ID 3915 [Err3915]、4264 [Err4264]、4336 [Err4336] 和 4388 [Err4388]).

本文档的目标是应用这些勘误, 消除与其他 JSON 规范的不一致, 并指出可能导致互操作性问题的做法.