这个简单的字符串是否被视为有效JSON?

Chr*_*ian 61 javascript json

我在SO中看到了很多复杂的问题,不管某些复杂的结构是否被认为是有效的JSON.

但是在光谱的另一端呢?

"12345"
Run Code Online (Sandbox Code Playgroud)

以上是有效的JSON吗?

小智 66

它是表示JSON 值的有效JSON语法.是否是有效的JSON 文本(用于指代JSON生成器的完整输出的正式术语)取决于上下文.

在道格拉斯克罗克福德 2006年发布的RFC 4627中(定义了application/json互联网媒体类型):

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

因此,使用该简单字符串作为具有互联网媒体类型的HTTP响应的完整主体是不合法的application/json.

但是,JSON规范已在2014年发布的RFC 7159以及ECMA-262的版本5.1 和ECMA-404中进行了更新.新规范没有上述限制,因此简单字符串视为有效的JSON文本.在RFC 7159中:

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


来自json.org的 JSON :


Rob*_*een 15

截至2014年,RFC 7159废弃旧的JSON RFC,并声明任何 JSON值都是有效的JSON文本和有效的application/json内容 - 包括字符串.但是,它还指出了旧JSON实现的不兼容问题:

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


Que*_*tin 6

它是一个有效的JSON字符串,但不是有效的JSON文本(即JSON文件).

请参阅JSON规范,其中说:

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

所以你可以在一些JSON中使用它,但它本身不是一个完整的JSON文件.

(值得注意的是,规范定义了一个JSON解析器:

JSON解析器将JSON文本转换为另一种表示形式.

我的<em>)

有关第二种意见,请参阅JSON Lint:

Parse error on line 1:
"12345"
^
Expecting '{', '['
Run Code Online (Sandbox Code Playgroud)

  • 这个答案仍然有效吗?Jsonlint将其显示为"有效的json". (3认同)

Dan*_*ite 5

它是一个有效的JSON字符串,但它不是JSON对象.

http://www.json.org/