我很困惑。引用 json.org
JSON 建立在两种结构之上:
- 名称/值对的集合。在各种语言中,这被实现为对象、记录、结构、字典、哈希表、键控列表或关联数组。
- 值的有序列表。在大多数语言中,这被实现为数组、向量、列表或序列。
所以,我不认为 '""' 应该是一个有效的 JSON 字符串,因为它既不是一个列表值(即不以 '[' 开头并以 ']' 结尾)但 JSON.parse 不给出异常并返回空字符串。
它是一个有效的 JSON 字符串吗?
我很困惑。引用 json.org
JSON 建立在两种结构之上:
所以,我不认为 '""' 应该是一个有效的 JSON 字符串,因为它既不是一个列表值(即不以 '[' 开头并以 ']' 结尾)但 JSON.parse 不给出异常并返回空字符串。
它是一个有效的 JSON 字符串吗?
不,''
不是有效的JSON。JSON.parse('')
确实会引发错误 - 只需查看浏览器控制台即可。
下次你有一个“这是有效的 JSON 吗?” 问题,只需通过JSON 验证器运行它。这就是它们存在的原因。
所以,我不认为
""
应该是一个有效的 JSON 字符串
它是一个有效的 JSON 字符串(这是一种可能出现在 JSON 文本中的数据类型)。
因为它既不是列表值(即不以'['开头并以']'结尾)
JSON文本(即完整的 JSON 文档)必须(在最外层)是对象或数组。字符串不是有效的 JSON 文本。
正式规范说:
JSON 文本是一个序列化的对象或数组。
但回到这里引用问题:
但 JSON.parse 不给出异常并返回空字符串。
您使用的 JSON 解析器过于自由。不要假设所有的 JSON 解析器都会。
例如,如果我跑步,perl -MJSON -E'say decode_json(q{""})'
我会得到:
JSON 文本必须是 -e 第 1 行的对象或数组(但找到数字、字符串、true、false 或 null,使用 allow_nonref 允许这样做)。
遵循最新的 JSON RFC 7159,""
实际上是有效的 JSON。但在一些早期的标准中并非如此。
引用:
JSON 文本是一系列标记。标记集包括六个结构字符、字符串、数字和三个文字名称。
JSON 文本是一个序列化的值。请注意,某些先前的 JSON 规范将 JSON 文本限制为对象或数组。仅生成需要 JSON 文本的对象或数组的实现将是可互操作的,因为所有实现都将接受这些作为符合标准的 JSON 文本。