'""' 是有效的 JSON 字符串吗?

har*_*iom 2 javascript json

我很困惑。引用 json.org

JSON 建立在两种结构之上:

  • 名称/值对的集合。在各种语言中,这被实现为对象、记录、结构、字典、哈希表、键控列表或关联数组。
  • 值的有序列表。在大多数语言中,这被实现为数组、向量、列表或序列。

因此,我认为 '""' 不应该是有效的 JSON 字符串,因为它既不是列表值(即不以 '[' 开头并以 ']' 结尾),但 JSON.parse 不会给出异常并返回空字符串。

它是一个有效的 JSON 字符串吗?

Que*_*tin 5

\n

所以,我认为不应该""是一个有效的 JSON 字符串

\n
\n

它是一个有效的 JSON 字符串(这是一种可能出现在 JSON 文本中的数据类型)。

\n
\n

因为它既不是列表值(即不以 \'[\' 开头并以 \']\' 结尾)

\n
\n

一个JSON文本(即一个完整的JSON文档)必须(在最外层)为\xe2\x80\xa6

\n

(这里我删去了原来的答案,因为规范已被修改)。

\n
\n

JSON 文本是序列化值。

\n
\n

(引用JSON 规范

\n

""有效的 JSON 文本也是如此。当编写此答案的原始版本时,情况并非如此。当最外层的值不是对象或数组时,某些 JSON 解析器可能会中断。

\n
\n

原来的答案(现在不正确的简历在这里):

\n

\xe2\x80\xa6 是一个对象或一个数组。字符串不是有效的 JSON 文本。

\n

正式规范说:

\n
\n

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

\n
\n

但回到这里引用问题:

\n
\n

但 JSON.parse 不会给出异常并返回空字符串。

\n
\n

您使用的 JSON 解析器过于自由。不要假设所有 JSON 解析器都是如此。

\n

例如,如果我运行perl -MJSON -E\'say decode_json(q{""})\'我会得到:

\n
\n

JSON 文本必须是一个对象或数组(但在 -e 第 1 行找到数字、字符串、true、false 或 null,请使用allow_nonref 允许这样做)。

\n
\n