最小有效 JSON 是多少?

2022-08-30 00:59:26

我已经仔细阅读了JSON描述 http://json.org/ 但我不确定我是否知道这个简单问题的答案。哪些字符串是最小可能的有效 JSON?

  • "string"字符串是否有效 JSON?
  • 42简单数字是否有效 JSON?
  • true布尔值是有效的 JSON 吗?
  • {}空对象是有效的 JSON 吗?
  • []空数组是有效的 JSON 吗?

答案 1

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

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

但是,ECMA-404的引入改变了这一点,并且可以在此处阅读更新的建议。我还写了一篇关于这个问题的博客文章。


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

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

  • ECMAScript JSON 语法的顶级 JSONText 生产可以包含任何 JSONValue,而不是被限制为 RFC 4627 指定的 JSONObject 或 JSONArray。

  • 截图

这意味着 JSON 对象接受所有 JSON 值(包括字符串、null 和数字),即使 JSON 对象在技术上符合 RFC 4627 也是如此。

请注意,因此,您可以通过 在符合的浏览器中字符串化数字,这将被另一个遵循RFC4627的解析器拒绝,但没有上面列出的特定异常。例如,Ruby似乎是一个接受对象和数组作为根的例子。另一方面,PHP特别添加了例外,即“它还将编码和解码标量类型和NULL”。JSON.stringify(5)


答案 2

至少有四个文档可以被视为互联网上的JSON标准。引用的 RFC 都描述了哑剧类型 。以下是每个人对顶级值的看法,以及是否允许在顶部使用对象或数组以外的任何内容:application/json

RFC-4627否。

JSON 文本是一系列标记。标记集包括六个结构字符、字符串、数字和三个文本名称。

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

JSON 文本 = 对象 / 数组

请注意,RFC-4627被标记为“信息性”而不是“建议标准”,并且它被RFC-7159淘汰,而RFC-7159又被RFC-8259淘汰。

RFC-8259是的。

JSON 文本是一系列标记。标记集包括六个结构字符、字符串、数字和三个文本名称。

JSON 文本是序列化值。请注意,JSON 的某些先前规范将 JSON 文本限制为对象或数组。仅生成调用 JSON 文本的对象或数组的实现将具有互操作性,因为所有实现都将接受这些对象或数组作为符合 JSON 文本。

JSON-text = ws value ws

RFC-8259的日期为2017年12月,标记为“互联网标准”。

ECMA-262是的。

JSON 语法根据 JSON 词法语法定义的标记定义有效的 JSON 文本。语法的目标符号是 JSONText。

语法 JSONText :

JSONValue

JSONValue :

JSONNullLiteral

JSON布尔Literal

JSONObject

JSONArray

JSONString

JSONNumber

ECMA-404是的。

JSON 文本是由符合 JSON 值语法的 Unicode 代码点形成的一系列标记。标记集包括六个结构标记、字符串、数字和三个文字名称标记。