什么是最低有效的JSON?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

我仔细阅读了JSON描述http://json.org/,但我不确定我是否知道简单问题的答案。什么字符串是最低可能的有效JSON?

  • "string" 是字符串有效的JSON?
  • 42 是简单的数字有效的JSON?
  • true 布尔值是一个有效的JSON?
  • {} 空对象是一个有效的JSON吗?
  • [] 空数组是一个有效的JSON?
提问于
用户回答回答于

在撰写本文时,JSON仅在RFC4627中有描述。它描述了(在“2”开头)一个JSON文本是一个序列化的对象或数组。

这意味着只有 {}并且[]是有效的,完全符合该标准的解析器和字符串中的JSON字符串。

然而,ECMA-404的引入改变了这一点,并且可以在这里阅读更新的建议。我也写过关于这个问题的博客文章

然而,为了进一步混淆这个问题,Web浏览器中可用的JSON对象(例如JSON.parse()JSON.stringify()在ES5中进行了标准化,并明确定义了可接受的JSON文本,如下所示:

本规范中使用的JSON交换格式与RFC 4627中描述的完全相同,但有两个例外:

  • ECMAScript JSON语法的顶级JSONText生成可以由任何JSONValue组成,而不是被RFC 4627指定的JSONObject或JSONArray限制。
  • 剪断

这意味着所有的 JSON值(包括字符串,空值和数字)都被JSON对象接受,即使JSON对象在技术上符合RFC 4627。

请注意,可以通过符合性浏览器对数字JSON.stringify(5)进行串联处理,否则将被另一个符合RFC4627的解析器拒绝,但没有上面列出的特定例外。例如,Ruby 似乎只是一个接受对象和数组作为根的例子。另一方面,PHP 特别增加了 “它也会对标量类型和NULL进行编码和解码” 的异常

用户回答回答于

至少有四个文件(rfc-7159被认为是rfc-7158的延续),可以被认为是互联网上的JSON标准。前三个RFC都描述了MIME类型application/json。以下是每个关于顶级值的说明:

RFC-4627 No.

JSON文本是一系列令牌。这组令牌包括六个结构字符,字符串,数字和三个字面名称。 JSON文本是一个序列化的对象或数组。 JSON文本=对象/数组

请注意,RFC-4627被标记为“信息性”而不是“提议的标准”,并且它被RFC-7158和RFC-7159废弃。

RFC-7158是的。(截至2008年修订版

(请参阅RFC-7159,它目前是相同的。)

RFC-7159是的。

JSON文本是一个序列化的值。请注意,某些先前的JSON规范将JSON文本约束为对象或数组。只生成对象或数组的JSON文本被调用的实现将是可互操作的,因为所有实现都将接受这些JSON文本为符合条件的JSON文本。 JSON文本= ws值ws

请注意,RFC-7159的存在仅仅是因为RFC-7158的发布日期在2014年3月更新(来源)时被错误地发布为“2013年3月” 。

ECMA-262是的。

JSON语法语法根据由JSON词法语法定义的标记定义有效的JSON文本。语法的目标符号是JSONText。 语法JSONText: JSONValue JSON值: JSONNullLiteral JSONBooleanLiteral 的JSONObject JSONArray JSONString JSONNumber

ECMA-404是的。

JSON文本是由符合JSON值语法的Unicode代码点形成的一系列令牌。这组令牌包括六个结构性令牌,字符串,数字和三个文字名称令牌。

扫码关注云+社区