这个简单字符串被认为是有效的JSON吗?

Is this simple string considered valid JSON?

本文关键字:JSON 有效 认为是 简单 字符串      更新时间:2023-09-26

我在so中看到过很多复杂的问题,一些复杂的结构是否被认为是有效的JSON

但是在光谱的另一端呢?

"12345"

以上是有效的JSON吗?

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

关于这个的混淆来自Douglas Crockford的RFC 4627,它最初在2006年定义了application/json互联网媒体类型。上面写着:

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

然而,正如Crockford在2013年的一篇文章中解释的那样(不幸的是与Google+的其他内容一起被删除,但在这里存档):

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

示例字符串是一个有效的JSON值,但是使用它作为完整的JSON文本是不正确的。application/json HTTP响应的正文。然而,这不再是真的:RFC-4627在2014年随着RFC 7159的发布而过时,它允许您使用任何JSON值:

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

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

从2014年开始,RFC 7159废除了旧的JSON RFC,并声明任何 JSON值都是有效的JSON文本和有效的应用程序/JSON内容——包括字符串。然而,它也指出了与旧JSON实现的不兼容性问题:

请注意,JSON先前的某些规范约束了aJSON文本为对象或数组。实现只生成调用JSON文本的对象或数组会像所有实现那样具有互操作性吗

这是一个有效的JSON字符串,但不是JSON对象。

见http://www.json.org/

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

原规范说:

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

…意味着最高级别必须是{}[]。你不能直接插入字符串

最新的规范说:

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

所以现在任何值,包括字符串,都可以是完整的JSON文本,"12345"现在是有效的

您可以简单地检查JSON。解析可以处理:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse示例

这是所有有效的JSON:

JSON.parse('{}');              // {}
JSON.parse('true');            // true
JSON.parse('"foo"');           // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null');            // null