JSON值是否有效的JSON?

13
JSON的值可以是字符串、数字、true、false、null吗?也就是说,

是否为有效的JSON?
true

一个有效的JSON文档?还是必须是数组/对象?

有些验证器接受这个(例如http://jsonlint.com/),而其他验证器则不接受(例如http://jsonschemalint.com/)。RFC和json.org在这个问题上并不清楚。


RFC 对这个问题的表述确实很清楚。 - djechlin
这个问题已经在这里重新提出,并得到了更详细的答案。我建议将其标记为重复,并保留较新的问题。 - IMSoP
可能是什么是最小有效JSON?的重复。 - Charles Duffy
2个回答

11
截至2014年3月:是的。来自规范
JSON文本是序列化的值。请注意,JSON的某些先前规范将JSON文本限制为对象或数组。在需要JSON文本时仅生成对象或数组的实现将在交互操作方面是可互操作的,因为所有实现都将接受这些符合JSON格式的文本。
然而,在最初提出这个问题的时候,答案是不可以。原始规范说
JSON文本是序列化的对象或数组
因此,JSON文本中最外层的数据类型必须是对象或数组,不能是字符串、布尔值、数字或其他任何数据类型。

1
虽然这个答案根据官方规范是正确的,但有趣的是,在浏览器中JSON.parse(42)似乎可以工作。 - bobics
1
只是一个技术说明 - 你提到的RFC是针对“JavaScript对象表示法的应用/ json媒体类型”,而不是JSON格式本身。ECMA-404和http://www.json.org/都没有明确说明这一点(据我所知)。我个人认为[42]是有效的JSON,而简单的42却不是,这让我感到很奇怪。 - Elephantik
请参见https://dev59.com/XWIk5IYBdhLWcg3wIq5U(注意ecma-404的发布日期和此答案)。 - Quentin

0

是的,根据ECMA-404《JSON数据交换标准》。

来源:http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf

JSON文本是由符合JSON值语法的Unicode代码点序列组成的令牌序列。

接下来,JSON值语法如下:

JSON值可以是对象、数组、数字、字符串、true、false或null。

这与RFC存在直接冲突,正如@quentin所引用的那样。更新的RFC是8259,其中指出:

请注意,先前某些JSON规范将JSON文本限制为对象或数组。在需要JSON文本的情况下仅生成对象或数组的实现将在互操作性方面是可互操作的,因为所有实现都将接受这些符合JSON文本的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接