一个数组可以作为顶级的 JSON 文本吗?
是的,数组是合法的顶级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文本"是否指的是顶级对象?我不太清楚。
数组可以作为顶级的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的。尽管它们(有意)看起来相似,但它们是不同的规范。