一个数组可以作为顶级的 JSON 文本吗?

9 浏览
0 Comments

一个数组可以作为顶级的 JSON 文本吗?

根据该帖子中的讨论:json-conversion-in-javascript

0
0 Comments

是的,数组是合法的顶级JSON文本。

有四个标准文档定义了JSON:RFC 4627、RFC 7159(取代了RFC 4627)、ECMA-404和RFC 8259(取代了RFC 7159,并将ECMA-404视为规范)。它们在允许的顶级元素方面存在差异,但都允许对象或数组作为顶级元素。

- RFC 4627:对象或数组。"JSON文本是一个序列化的对象或数组。"

- RFC 7159、RFC8259:任何JSON值。"JSON文本是一个序列化的值。请注意,先前的JSON规范限制JSON文本为对象或数组。"(第2节)

- ECMA-404:任何JSON值。"JSON文本是由符合JSON值语法的Unicode码点序列组成的令牌序列。"

根据这个较新的RFC,"JSON文本是一个令牌序列。令牌集包括六个结构字符、字符串、数字和三个字面名称。"

这与问题有什么关系?

这个评论是对答案的评论,而不是问题,但它的精神现在反映在这个答案的当前修订版中。简而言之,较新的RFC并不限制JSON文本为对象或数组,允许任何序列化的值。

术语"JSON文本"是否指的是顶级对象?我不太清楚。

0
0 Comments

数组可以作为顶级的JSON文本吗?

在ECMAScript规范中有这样的定义:

JSONText:

JSONValue

JSONValue:

JSONNullLiteral

JSONBooleanLiteral

JSONObject

JSONArray

JSONString

JSONNumber

这个定义可能有点误导性,因为ECMAScript允许解析不是顶级文本的JSON字符串。根据RFC的定义,"JSON文本是一个序列化的对象或数组"。

这很奇怪,我想知道Crockford对此的看法。他们将如何解决RFC和ECMA之间的差异呢?

我刚刚查了一下,发现他们意识到了这个差异。根据ECMAScript 5 §15.12的规定,"ECMAScript JSON语法中的顶级JSONText可以由任何JSONValue组成,而不仅仅是由RFC 4627规定的JSONObject或JSONArray。"我不知道IETF是否会修改RFC。

谢谢你的回答,我已经被搞得非常困惑了。json.org对"json-text"这个更严格的概念根本没有提及,而RFC对其重要性也有点模糊。

这个答案是关于ECMAScript的,但问题是关于JSON的。尽管它们(有意)看起来相似,但它们是不同的规范。

0
0 Comments

问题出现的原因是JSON劫持漏洞,它是基于JavaScript中重写数组构造函数的信息泄露漏洞。为了解决这个问题,可以将根元素设为对象而不是数组。在现代浏览器中,JSON劫持已经不再是一个问题。

0