为什么JSONObject无序?这背后的原因是什么?

问题描述:

我想了解JSONObject的原因和/或核心逻辑是一个无序的集合。因为在我的大多数情况下,会有一个需要响应的请求,按照时间/位置的顺序作为JSONObject。搜索后,我发现很多成员都在使用JSONArray,我觉得这不是一个好的解决方案。为什么JSONObject无序?这背后的原因是什么?

在继续下一步之前,我想先弄清楚一下。

预先感谢您。

+1

为什么JSONArray不是一个好主意? – nhahtdh 2012-07-23 12:06:26

+0

对象没有任何参数的顺序,如果你有一个项目列表,那么这需要在一个数组中完成。 – 2012-07-23 12:07:57

+0

JSONObject不是无序集合。它更像是一个HashMap而不是其他任何东西。在JSON中有唯一的顺序是数组 – Matt 2012-07-23 12:30:18

JSONObject是无序的,因为通过JSON描述对象是无序的,通过规格:

一个目的是无序集合的名称/值对。

(这是因为JSON源自[是的一个子集] JavaScript的object initializer syntax,和JavaScript对象是无序  —因为没有理由为一个对象的属性在一般情况下被排序。可留给对象的专门化,比如JavaScript的数组,这些数组是nothing more than objects,有一些特殊的属性名称处理和相关的类似数组的功能。)

只有ECMA委员会成员才知道真实的完整原因由于JSONObjects是JavaScript对象的子集,因此最终确定了ECMAScript规范;然而,这是我的猜测。

要求JSON对象的属性保持一个固定的顺序,可能会给数据结构增加额外的实现开销,否则在没有这个要求的情况下会更简单。例如,一个JSON对象可以作为一个简单的哈希表来实现;然而,如果物业的订单保持不变,那么需要额外的数据结构来列出它们的订单。

+0

ECMA没有指定JSON(至少不是直接),据我所知。 – 2012-07-23 12:11:08

+0

@JoachimSauer:当然,但是由于JSON是“JavaScript对象表示法”,您仍然可以将ECMAScript规范视为对JSON有相当大的影响。 – maerics 2012-07-23 12:12:24

如果JavaScript规定了对象属性的排序,它将阻止哈希表在其实现中的使用。另一方面,为什么一个对象的属性首先被排序呢?正如我们所看到的,这似乎是一种武断的限制,影响深远。