2017-01-22 113 views
-1

很明顯,我不能依賴JSON中的鍵值對的排序。例如,JSON解析器可以解釋我可以依賴JSON數組的順序嗎?

{ 
    "someKey" : "someValue", 
    "anotherKey" : "anotherValue", 
    "evenAnotherKey" : "evenAnotherValue" 
} 

{ 
    "anotherKey" : "anotherValue", 
    "someKey" : "someValue", 
    "evenAnotherKey" : "evenAnotherValue" 
} 

合法的,但我可以依靠JSON 陣列的順序?例如,可以一個JSON解析器解釋

{ 
    "arrayKey" : ["firstElement", "secondElement", "thirdElement"] 
} 

{ 
    "arrayKey" : ["secondElement", "firstElement1", "thirdElement"] 
} 

合法?我假設沒有,但我的朋友告訴我說我錯了。

+0

你問關於JSON數組,但談論JavaScript編譯器。你在處理JSON還是JavaScript? – Quentin

+0

@Quentin我的意思是一個解析器。我將編輯該問題。 – Bennett

回答

1

是的,你可以!數組已經制作好了,所以順序很重要!這就是將陣列中的物體分開的原因。特別是在JS和JSON中。

0

數組和列表總是有序的。這是數組和列表的要點 - 它們的位置它們的索引。


順便說一句,由於ES5的對象順序(您稱之爲鍵值對)也可以得到保證。但不是直截了當的方式。

對於對象,任何是數字的鍵都將在非數字鍵之前進行排序,並將按數字排序。但所有其他鍵都保證按插入順序排列。

{ 
    "22" : "first", 
    hello : "world", 
    foo : "bar" 
} 

目前所有瀏覽器都支持這一點,Node.js的支持這一點,但不是所有的JavaScript交叉編譯器(如巴別塔)支持:那麼下列對象:爲

{ 
    hello : "world", 
    foo : "bar", 
    "22" : "first" 
} 

必須歸還。

就我個人而言,我不喜歡按照順序來處理像對象這樣的無序數據結構。但它看起來像js社區不同意。例如,有意地將地圖的排序隨機化,以防止人們依賴於語言實現中的任何意外穩定排序。