我在SO中看到了很多复杂的问题,不管某些复杂的结构是否被认为是有效的JSON。
但是另一方面的事情呢?
"12345"
以上是否有效JSON?
答案 0 :(得分:59)
它是有效的JSON语法,表示JSON 值。是否是有效的JSON 文本(用于指代JSON生成器的完整输出的正式术语)取决于上下文。
2006年发布的Douglas Crockford RFC 4627(定义{{1}}互联网媒体类型):
JSON文本是序列化对象或数组。
因此,使用该简单字符串作为具有互联网媒体类型application/json
的HTTP响应的完整正文是不合法的。
但是,JSON规范已在2014年发布的RFC 7159以及ECMA-262的版本5.1和ECMA-404中更新。新规范没有上述限制,因此将认为该简单字符串是有效的JSON文本。在RFC 7159中:
JSON文本是序列化值。请注意,某些先前的JSON规范将JSON文本约束为对象或数组。只生成调用JSON文本的对象或数组的实现将是可互操作的,因为所有实现都会将这些实现接受为符合JSON的文本。
来自json.org的JSON 值:
答案 1 :(得分:15)
截至2014年,RFC 7159废弃旧的JSON RFC,并声明任何 JSON值是有效的JSON文本和有效的application / json内容 - 包括字符串。但是,它还指出了旧JSON实现的不兼容问题:
请注意,某些以前的JSON规范约束了a JSON文本是一个对象或数组。实现 仅生成调用JSON文本的对象或数组 在所有实现都将具有的意义上,它将是可互操作的 接受这些作为符合JSON的文本。
答案 2 :(得分:6)
它是一个有效的JSON字符串,但不是有效的JSON文本(即JSON文件)。
请参阅the JSON specification说明:
JSON文本是序列化对象或数组。
所以你可以在一些JSON中使用它,但它本身不是一个完整的JSON文件。
(值得注意的是,规范定义了一个JSON解析器:
JSON解析器将 JSON文本转换为另一种表示形式。
我的<em>
)
有关第二意见,请参阅JSON Lint:
Parse error on line 1:
"12345"
^
Expecting '{', '['
答案 3 :(得分:5)
它是一个有效的JSON字符串,但它不是JSON对象。
答案 4 :(得分:2)
不,这不是有效的JSON。 JSON是JavaScript Object Notation的首字母缩写。虽然您提供的示例是使用JSON定义的对象 中有效,但它本身无效。看看这个在线JSON验证器:http://jsonlint.com/
第1行的解析错误:12345 ^期待'{','['
您可以在http://json.org了解有关JSON的更多信息。