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

发布于 2024-09-26 06:04:16 字数 148 浏览 1 评论 0原文

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

per the debate in this post: json-conversion-in-javascript

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

帝王念 2024-10-03 06:04:16

是的,数组作为顶级 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 代码点形成的标记序列
    语法。”

Yes, an array is legal as top-level JSON-text.

There are four standard documents defining JSON: RFC 4627, RFC 7159 (which obsoletes RFC 4627), ECMA-404, and RFC 8259 (which obsoletes RFC 7159, and calls ECMA-404 normative). They differ in which top-level elements they allow, but all allow an object or an array as the top-level element.

  • RFC 4627: Object or array.
    "A JSON text is a serialized object or array."
  • RFC 7159, RFC8259: Any JSON value.
    "A JSON text is a serialized value. Note that certain previous specifications of JSON constrained a JSON text to be an object or an array." Section 2
  • ECMA-404: Any JSON value.
    "A JSON text is a sequence of tokens formed from Unicode code points that conforms to the JSON value
    grammar."
猫腻 2024-10-03 06:04:16

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

Yes, but you should consider making the root an object instead in some scenarios, due to JSON hijacking. This is an information disclosure vulnerability based on overriding the array constructor in JavaScript.

赤濁 2024-10-03 06:04:16

这是来自 ECMAScript 规范。

JSONText :
    JSONValue

JSONValue :
    JSONNullLiteral 
    JSONBooleanLiteral 
    JSONObject 
    JSONArray 
    JSONString 
    JSONNumber

This is from the ECMAScript specification.

JSONText :
    JSONValue

JSONValue :
    JSONNullLiteral 
    JSONBooleanLiteral 
    JSONObject 
    JSONArray 
    JSONString 
    JSONNumber
单身情人 2024-10-03 06:04:16

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

Yes you can do it. Put in [{}]

抚你发端 2024-10-03 06:04:16

这对我有用:

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

我将上面的内容作为字符串存储在 MySQL DB 中,然后在我的 PHP 中执行此操作没有问题:

  <?php

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

        echo $checkArr[0];

    ?>

这会产生以下结果:

apple

This works for me:

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

I store that above in MySQL DB as a string, and then have no problem doing this in my PHP:

  <?php

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

        echo $checkArr[0];

    ?>

Which yields this:

apple

小嗲 2024-10-03 06:04:16

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

更新:RFC 4627 已过时。新的 RFC 7159 还允许在顶层使用简单的值。 (谢谢,
马蒂亚斯·迪特·沃尔诺弗。)

There is some confusion, seen in the other comments. The "application/json" media type allows only object or array at the top-level for JSON-text, per JSON RFC. However, for a parser any JSON value is acceptable, as seen in the ECMAScript specification.

Update: RFC 4627 is outdated. The new RFC 7159 permits also simple values at the top-level. (Thanks,
Matthias Dieter Wallnöfer.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文