2012-07-23 127 views
0

我想了解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

回答

3

JSONObject是無序的,因爲通過JSON描述對象是無序的,通過規格:

一個目的是無序集合的名稱/值對。

(這是因爲JSON源自[是的一個子集] JavaScript的object initializer syntax,和JavaScript對象是無序  —因爲沒有理由爲一個對象的屬性在一般情況下被排序。可留給對象的專門化,比如JavaScript的數組,這些數組是nothing more than objects,有一些特殊的屬性名稱處理和相關的類似數組的功能。)

0

只有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

0

如果JavaScript規定了對象屬性的排序,它將阻止哈希表在其實現中的使用。另一方面,爲什麼一個對象的屬性首先被排序呢?正如我們所看到的,這似乎是一種武斷的限制,影響深遠。

相關問題