以下是有效的JSON文本,还是它们的顶级值必须是数组或对象?
4.0
"Hello World"
true
过去的相关问题,例如What is the minimum valid JSON?和Is this simple string considered valid JSON?已经得出结论,他们不是。这是基于RFC-4627中JSON格式的描述,其中指出:
2。 JSON语法
JSON文本是一系列令牌。这组令牌包括六个 结构字符,字符串,数字和三个文字名称。
JSON文本是序列化对象或数组。
JSON-text = object / array
这是六个结构特征:
[...]
但是,RFC-4627状态声明它“未指定任何类型的Internet标准”。相反,JSON的官方标准是最近发布的ECMA-404。与RFC-4627不同,ECMA-404对有效JSON文本的描述不包括任何对象或数组的要求。例如,与上面引用最相似的部分缺少该要求:
4 JSON文本
JSON文本是由符合JSON值的Unicode代码点组成的标记序列 语法。该组令牌包括六个结构标记,字符串,数字和三个文字名称标记。
六个结构代币:
[...]
鉴于这个新规范,编码的非数组非对象顶级值是否被认为是有效的JSON文本?
答案 0 :(得分:30)
JSON只是一种语法,语法包括数字和字符串。 JSON的使用必须更具限制性。 RFC-4627是一种可能的用途,并且从未打算成为JSON本身的标准。
我们不能说非数组非对象JSON文本通常是无效的,只是按照RFC-4627将它们与互联网媒体类型application/json
一起使用是无效的。
非对象非数组值的表示是每个ECMA-404的有效JSON文本,这是当前唯一可能被标识为“JSON规范”的标准。
然而,事实证明,IETF可能很快会发布RFC-4627的替代品,而也是JSON的规范。 Its latest draft仍包含对JSON文本的限制,但也提到JSON已在多个地方指定,并且这些规范略有不同。该草案特别提到ECMA-262中的JSON定义(ECMAScript / JavaScript规范)不共享顶级值限制。
因此,必须消除非对象非数组是否为有效JSON文本的问题:
"hello"
是RFC-4627及其后续版本中指定的有效JSON文本吗?没有
"hello"
是ECMA-404和ECMA-262指定的有效JSON文本吗?是