Skip to main content

1. Introduction (简介)

JavaScript Object Notation (JSON,JavaScript对象表示法) 是一种用于结构化数据序列化 (Serialization) 的文本格式。它源自JavaScript的对象字面量 (Object Literals),如ECMAScript编程语言标准第三版 [ECMA-262] 中所定义。

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

字符串 (String) 是零个或多个Unicode字符 [UNICODE] 的序列。请注意,此引用是针对最新版本的Unicode,而不是特定的发行版。JSON的语法不会受到Unicode规范未来变化的影响。

对象 (Object) 是零个或多个名称/值对 (Name/Value Pairs) 的无序集合,其中名称是字符串,值可以是字符串、数字、布尔值、null、对象或数组。

数组 (Array) 是零个或多个值的有序序列。

本文档中使用的术语"对象 (object)"和"数组 (array)"来自JavaScript的约定。

JSON的设计目标是使其最小化 (Minimal)、可移植 (Portable)、文本化 (Textual),并且是JavaScript的子集。

1.1. Conventions Used in This Document (本文档使用的约定)

关键词"MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"NOT RECOMMENDED"、"MAY"和"OPTIONAL"在本文档中的解释应符合BCP 14 [RFC2119] [RFC8174],当且仅当它们以全大写形式出现时(如此处所示)。

本文档中的语法规则应按照 [RFC5234] 中的描述进行解释。

1.2. Specifications of JSON (JSON的规范)

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

JSON也在 [ECMA-404] 中进行了描述。

前一句中对ECMA-404的引用是规范性的 (Normative),但其含义与通常的含义不同——不是指实现者需要参考它才能理解本文档,而是强调在其所有规范中,术语"JSON文本 (JSON text)"的定义没有不一致之处。但是,请注意,ECMA-404允许本规范为了最大互操作性而建议避免的几种做法。

其目的是两个文档之间的语法是相同的,尽管使用了不同的描述。如果发现它们之间存在差异,ECMA和IETF将共同努力更新两个文档。

如果在任一文档中发现错误,则应检查另一个文档是否存在类似错误;如果存在,应在可能的情况下进行修复。

如果将来任一文档发生更改,ECMA和IETF将共同努力确保两个文档在更改过程中保持一致。

1.3. Introduction to This Revision (本修订版简介)

自RFC 4627发布以来的几年中,JSON得到了非常广泛的应用。这一经验揭示了某些模式,虽然其规范允许,但会导致互操作性问题。

此外,关于RFC 4627(参见RFC勘误ID 607 [Err607] 和3607 [Err3607])以及RFC 7159(参见RFC勘误ID 3915 [Err3915]、4264 [Err4264]、4336 [Err4336] 和4388 [Err4388])报告了少量勘误。

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