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

时间:2013-03-10 17:57:45

标签: javascript json

我很困惑。引用json.org

JSON基于两种结构:

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

所以,我不认为'“”'应该是一个有效的JSON字符串,因为它既不是列表值(即不以'['开头,也以']'结尾,但是JSON.parse没有给出异常并返回空字符串。

它是否是有效的JSON字符串。

3 个答案:

答案 0 :(得分:3)

不,'' 不是有效的JSON。 JSON.parse('') 会抛出错误 - 只需查看浏览器控制台即可。

下次你有“这是有效的JSON吗?”问题,只需运行a JSON validator.这就是它们存在的原因。

答案 1 :(得分:3)

  

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

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

  

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

JSON 文本(即完整的JSON文档)必须(在最外层)是对象或数组。字符串不是有效的JSON文本。

formal specification说:

  

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

但回到这里引用问题:

  

但是JSON.parse没有给出异常并返回空字符串。

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

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

  

JSON文本必须是-e第1行的对象或数组(但找到数字,字符串,true,false或null,使用allow_nonref来允许)。

答案 2 :(得分:1)

遵循最新的JSON RFC 7159""实际上是有效的JSON。但在一些早期的标准中却没有。

引用:

  

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

     

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