数组可以是顶级 JSON 文本吗?
根据这篇文章中的辩论:json-conversion-in-javascript
per the debate in this post: json-conversion-in-javascript
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
根据这篇文章中的辩论:json-conversion-in-javascript
per the debate in this post: json-conversion-in-javascript
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
是的,数组作为顶级 JSON 文本是合法的。
有四个定义 JSON 的标准文档:RFC 4627、RFC 7159(废弃 RFC 4627),ECMA-404 和 RFC 8259(废弃 RFC 7159,并调用 ECMA-404 规范)。它们的不同之处在于允许哪些顶级元素,但都允许对象或数组作为顶级元素。
“JSON 文本是序列化的对象或数组。”
“JSON 文本是序列化值。请注意,以前的某些 JSON 规范将 JSON 文本限制为对象或数组。” 第 2 节
“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.
"A JSON text is a serialized object or array."
"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
"A JSON text is a sequence of tokens formed from Unicode code points that conforms to the JSON value
grammar."
是的,但在某些情况下,您应该考虑将根作为对象,因为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.
这是来自 ECMAScript 规范。
This is from the ECMAScript specification.
是的,你可以做到。放入
[{}]
Yes you can do it. Put in
[{}]
这对我有用:
我将上面的内容作为字符串存储在 MySQL DB 中,然后在我的 PHP 中执行此操作没有问题:
这会产生以下结果:
apple
This works for me:
I store that above in MySQL DB as a string, and then have no problem doing this in my PHP:
Which yields this:
apple
从其他评论中可以看出,有些混乱。 “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.)