ECMA-404的出版是否影响了JSON文本的有效性,例如"2"或""你好"?

21

以下是有效的JSON文本,还是它们的顶级值必须是数组或对象?

4.0
Run Code Online (Sandbox Code Playgroud)
"Hello World"
Run Code Online (Sandbox Code Playgroud)
true
Run Code Online (Sandbox Code Playgroud)

过去的相关问题,例如什么是最小有效JSON?,这个简单的字符串被认为是有效的JSON吗?已经得出结论,他们不是.这是基于RFC-4627中 JSON格式的描述,其中指出:

2. JSON语法

JSON文本是一系列标记.标记集包括六个结构字符,字符串,数字和三个文字名称.

JSON文本是序列化对象或数组.

 JSON-text = object / array
Run Code Online (Sandbox Code Playgroud)

这些是六个结构特征:

[...]

但是,RFC-4627状态声明它"未指定任何类型的Internet标准".相反,JSON的官方标准是最近发布的ECMA-404.与RFC-4627不同,ECMA-404对有效JSON文本的描述不包括任何对象或数组的要求.例如,与上面引用最相似的部分缺少该要求:

4 JSON文本

JSON文本是由符合JSON值语法的Unicode代码点形成的标记序列.该组令牌包括六个结构标记,字符串,数字和三个文字名称标记.

六个结构代币:

[...]

鉴于这个新规范,编码的非数组非对象顶级值是否被认为是有效的JSON文本?

小智 31

道格拉斯·克罗克福德(Douglas Crockford)对此Google+帖子发表了评论,有助于我开始澄清事情:

JSON只是一种语法,语法包括数字和字符串.JSON的使用必须更具限制性.RFC-4627是一种可能的用途,并且从未打算成为JSON本身的标准.

我们不能说非数组非对象JSON文本通常是无效的,只是application/json根据RFC-4627 将它们与互联网媒体类型一起使用是无效的.

非对象非数组值的表示是每个ECMA-404的有效JSON文本,这是当前唯一可能被标识为"JSON规范"的标准.

然而,事实证明,IETF可能很快就会发布RFC-4627的替代品,这将是JSON的规范.它的最新草案仍然包括对JSON文本的限制,但也提到JSON已经在几个地方指定,并且这些规范略有不同.该草案特别提到ECMA-262中的JSON定义(ECMAScript/JavaScript规范)不共享顶级值限制.

因此,必须消除非对象非数组是否为有效JSON文本的问题:

"hello"RFC-4627及其后续版本中指定的有效JSON文本吗?

没有.

"hello"ECMA-404和ECMA-262指定的有效JSON文本吗?

是.

  • 请参阅我对http://stackoverflow.com/questions/18419428/what-is-the-minimum-valid-json/22361229#22361229的回答,它更新了RFC-7158中的定义**允许字符串作为顶部级JSON文本.该答案还阐明了RFC-7159是什么. (4认同)
  • Tim Bray写了[一篇资料性的文章,解释了JSON规范的更多历史](https://www.tbray.org/ongoing/When/201x/2014/03/05/RFC7159-JSON). (2认同)