数组可以是顶级 JSON 文本吗?

根据这篇文章中的辩论: Javascript 中的转换

76313 次浏览

是的,数组作为顶级 JSON-text 是合法的。

定义 JSON 有四个标准文档: RFC 4627RFC 7159(废弃 RFC4627)、 ECMA-404RFC 8259(废弃 RFC7159,并调用 ECMA-404标准)。它们在允许哪些顶级元素方面有所不同,但都允许将对象或数组作为顶级元素。

  • RFC 4627: 对象或数组。 < br/> “ JSON 文本是一个序列化的对象或数组。”
  • RFC 7159,RFC8259: 任何 JSON 值。 < br/> “ JSON 文本是一个序列化值。请注意,JSON 之前的某些规范将 JSON 文本限制为对象或数组。”< a href = “ https://www.rfc-edit. org/rfc/rfc8259 # Section-2”rel = “ noReferrer”> Section 2
  • ECMA-404: 任何 JSON 值。 < br/> “ JSON 文本是由符合 JSON 值的 Unicode 代码点形成的令牌序列 语法。”

是的,你可以做到。输入 [{}]

这来自 ECMAScript 规范。

JSONText :
JSONValue


JSONValue :
JSONNullLiteral
JSONBooleanLiteral
JSONObject
JSONArray
JSONString
JSONNumber

Yes ,但是在某些情况下,由于 JSON 劫机的原因,您应该考虑使根成为一个对象。这是一个基于重写 JavaScript 中的数组构造函数的信息披露漏洞。

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

更新: RFC 4627已经过时了。新的 RFC 7159允许在顶层使用简单的值。(谢谢, Matthias Dieter Wallnöfer)

这对我有用:

["apple","pear","banana"]

我将上面的内容以字符串的形式存储在 MySQL DB 中,然后在我的 PHP 中完全可以做到这一点:

  <?php


$checkArr = json_decode($pageData[0]['pg_json']);


echo $checkArr[0];


?>

结果是这样的:

苹果