我很困惑。引用json.org
JSON基于两种结构:
所以,我不认为'“”'应该是一个有效的JSON字符串,因为它既不是列表值(即不以'['开头,也以']'结尾,但是JSON.parse没有给出异常并返回空字符串。
它是否是有效的JSON字符串。
答案 0 :(得分:3)
不,''
不是有效的JSON。 JSON.parse('')
会抛出错误 - 只需查看浏览器控制台即可。
下次你有“这是有效的JSON吗?”问题,只需运行a JSON validator.这就是它们存在的原因。
答案 1 :(得分:3)
所以,我认为
""
不应该是有效的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来允许)。
答案 2 :(得分:1)
遵循最新的JSON RFC 7159,""
实际上是有效的JSON。但在一些早期的标准中却没有。
引用:
JSON文本是一系列令牌。标记集包括六个结构字符,字符串,数字和三个文字名称。
JSON文本是序列化值。请注意,某些先前的JSON规范将JSON文本约束为对象或数组。 只生成调用JSON文本的对象或数组的实现将是可互操作的,因为所有实现都会将这些实现接受为符合JSON的文本。