这个简单的字符串是否被视为有效的JSON?


Answers:


85

是的,在大多数情况下。这是表示JSON值的有效JSON语法。

对此的困惑来自于Douglas Crockford的RFC 4627,它最初application/json于2006年定义了互联网媒体类型。它说:

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

但是,正如Crockford在2013年的一篇文章中所解释的(不幸的是,其余的Google+删除了它):

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

示例字符串是有效的JSON值,但是将其用作application/jsonHTTP响应的完整“ JSON文本”正文可能是不正确的。但是,这不再是真的:RFC-4627在2014年随RFC 7159的发布而过时,它使您可以使用任何JSON值:

JSON文本是序列化的值。请注意,以前的某些JSON规范将JSON文本限制为对象或数组。

2013年还发布了“ JSON本身的标准”,称为ECMA-404,并且在ECMAScript(JavaScript)规范ECMA-262的5.1版中也定义了JSON 。这些规范和大多数解析器允许将任何JSON值作为完整的JSON文本,即使它只是一个简单的字符串也是如此。


17

自2014年起,RFC 7159淘汰了较早的JSON RFC,并声明任何JSON值均为有效JSON文本和有效的应用程序/ json内容-包括字符串。但是,它也指出了旧版JSON实现的不兼容问题:

请注意,以前的某些JSON规范将JSON文本限制为对象或数组。从所有实现都将其接受为符合JSON文本的意义上说,仅生成需要调用JSON文本的对象或数组的实现将可以互操作。



5

在撰写此问题时,这将不是有效的JSON文本。这将是一个有效的字符串,可以作为JSON文本的一部分出现。

最初的规范说:

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

…表示最高级别必须为{}[]。你不能直接用绳子潜水。

最新的规范说:

JSON文本是序列化的值。请注意,以前的某些JSON规范将JSON文本限制为对象或数组。

因此,现在任何值(包括字符串)都可以是完整的JSON文本,"12345"并且现在有效。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.