我在 SO 中看到了很多复杂的问题,无论某些复杂的结构是否被认为是有效的 JSON。
但是光谱另一端的东西呢?
"12345"
以上是有效的 JSON 吗?
我在 SO 中看到了很多复杂的问题,无论某些复杂的结构是否被认为是有效的 JSON。
但是光谱另一端的东西呢?
"12345"
以上是有效的 JSON 吗?
是的,在大多数情况下。它是表示 JSON 值的有效 JSON 语法。
对此的困惑来自 Douglas Crockford 的RFC 4627,它最初application/json
在 2006 年定义了互联网媒体类型。它说:
JSON 文本是序列化的对象或数组。
然而,正如克罗克福德在 2013 年的一篇帖子中所解释的那样(不幸的是被 Google+ 的其余部分删除,但在此处存档):
JSON 只是一种语法,语法包括数字和字符串。JSON 的使用必须更加严格。RFC-4627 是一种可能的用途,并且从未打算成为 JSON 本身的标准。
示例字符串是一个有效的 JSON 值,但将其用作application/json
HTTP 响应的完整“JSON 文本”正文是不正确的。然而,这不再是事实: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 规范将 JSON 文本限制为对象或数组。仅生成需要 JSON 文本的对象或数组的实现将是可互操作的,因为所有实现都将接受这些作为一致的 JSON 文本。
它是一个有效的 JSON 字符串,但它不是一个 JSON 对象。
您可以简单地检查 JSON.parse 可以处理的内容:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#examples
这是所有有效的 JSON:
JSON.parse('{}'); // {}
JSON.parse('true'); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null'); // null