120

根据这篇文章中的辩论:json-conversion-in-javascript

4

5 回答 5

144

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

定义 JSON 的标准文档有四个:RFC 4627RFC 7159(废弃 RFC 4627)、ECMA-404RFC 8259(废弃 RFC 7159,并称为 ECMA-404 规范)。它们在允许的顶级元素上有所不同,但都允许将对象或数组作为顶级元素。

  • RFC 4627:对象或数组。
    “JSON 文本是一个序列化的对象或数组。”
  • RFC 7159、RFC8259:任何 JSON 值。
    “JSON 文本是一个序列化值。请注意,某些先前的 JSON 规范将 JSON 文本限制为对象或数组。” 第 2 节
  • ECMA-404:任何 JSON 值。
    “JSON 文本是由符合 JSON 值语法的 Unicode 代码点形成的标记序列。”
于 2010-09-30T17:44:06.753 回答
67

是的,但由于JSON 劫持,您应该考虑在某些情况下将根设为对象。这是一个基于在 JavaScript 中重写数组构造函数的信息泄露漏洞。

于 2010-09-30T17:56:50.493 回答
5

这是来自 ECMAScript 规范。

JSON文本:
    JSON值

JSON值:
    JSONNullLiteral
    JSONBooleanLiteral
    JSON对象
    JSON数组
    JSON字符串
    JSON数字
于 2010-09-30T17:45:18.933 回答
2

是的,你可以做到。投放[{}]

于 2010-09-30T17:45:12.523 回答
2

在其他评论中看到了一些混乱。根据JSON RFC,“application/json”媒体类型仅允许 JSON 文本的顶层对象或数组。但是,对于解析器,任何 JSON 值都是可接受的,如 ECMAScript 规范中所见。

更新:RFC 4627 已过时。新的 RFC 还允许顶层的简单值。(谢谢,Matthias Dieter Wallnöfer。)

于 2012-06-21T21:38:41.983 回答