it-swarm.cn

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

我在SO中看到了很多复杂的问题_是否一些复杂的结构被认为是有效的JSON。

但是在光谱的另一端呢?

"12345"

以上是有效的JSON吗?

53
Christian

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

在Douglas Crockford的 RFC 4627 中发表于2006年(定义了application/json网络媒体类型):

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

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

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

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


来自 json.org 的JSON value

59

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

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

15
Robin Green

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

请参阅 JSON规范 其中说:

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

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

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

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

我的<em>

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

Parse error on line 1:
"12345"
^
Expecting '{', '['
6
Quentin

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

http://www.json.org/

5
Daniel A. White

不,这不是有效的JSON。 JSON是JavaScript Object Notation的首字母缩写。虽然您给出的示例有效inside使用JSON定义的对象,但它本身无效。看看这个在线JSON验证器: http://jsonlint.com/

第1行的解析错误:12345 ^期待'{','['

您可以在 http://json.org 上阅读有关JSON的更多信息。

2
James Hill

因此,为了用一个反例来回答问题,并将原始示例转换为有效的,向后兼容的JSON,可以简单地使用括号来表示它是一个具有单个值的数组:["12345"]

0
R.D. Alkire