2012-03-14 36 views
0

我有以下JSON數據被返回,但由於某種原因,Javascript或jQuery ajax似乎重新組織項目列表。服務器返回的item.title(驗證)按字母順序排序的數據...JSON對象排序被jQuery或Javascript篡改

以下JSON是排序已經被宰殺後:

{ 
     "count": 3, 
     "items": { 
      "tardis": { 
       "type": 40, 
       "title": "Tardis", 
       "timeMachine": true, 
       "reliable": true 
      }, 
      "stargate": { 
       "type": "Milky way gate", 
       "title": "Stargate + solar flare", 
       "timeMachine": true, 
       "reliable": false 
      } 
     } 
    } 

有誰爲什麼排序被篡改?我怎樣才能在標題值之後重新排序項目?

回答

5

您的items對象不是一個數組,而只是一個帶有已命名成員的對象。這些成員沒有固有的秩序。

例如,在chrome中執行console.log({ your object })將產生按照成員名稱排序的屬性,在此例中爲「stargate」和「tardis」。但是爲同一個對象編寫for(k in x.items) console.log(k),將會(在Chrome中 - 再次,這裏沒有可靠的規範)按照它們定義的順序迭代對象,並記錄「tardis」,「stargate」。

此排序是如何呈現對象的工件,而不是對象本身。如果您想要訂購,請使用陣列:

{ 
    "count": 3, 
    "items": [ 
     { 
      "key": "stargate", 
      "type": "Milky way gate", 
      "title": "Stargate + solar flare", 
      "timeMachine": true, 
      "reliable": false 
     }, 
     { 
      "key": "tardis", 
      "type": 40, 
      "title": "Tardis", 
      "timeMachine": true, 
      "reliable": true 
     } 
    ] 
} 
+1

確實。規範不保證對象中屬性的順序。 – 2012-03-14 07:26:58

3

對象的鍵未按定義的順序排列。一旦它們被放入JavaScript對象中,它們可以以任何順序返回。這是語言的設計和規定。

如果您希望它們按特定順序排列,那麼您需要將數據置於數組中(已排序),或者您需要有序索引才能讓您按所需順序訪問鍵。

數組有一致的順序,對象沒有。

它看起來對我來說,你可能需要一個數據結構,看起來像這樣:

{ 
    "count": 3, 
    "items": [ 
     { 
      "name": "tardis", 
      "type": 40, 
      "title": "Tardis", 
      "timeMachine": true, 
      "reliable": true 
     }, 
      "name": "stargate", 
      "type": "Milky way gate", 
      "title": "Stargate + solar flare", 
      "timeMachine": true, 
      "reliable": false 
     } 
    ] 
} 

這樣,項目與特定順序的數組:items[0]items[1]等..

僅供參考,當您這樣做時,您不需要"count"值,因爲items陣列將具有items.length

沒有計數值,你的整個反應可能只是對象的數組:

[ 
     { 
      "name": "tardis", 
      "type": 40, 
      "title": "Tardis", 
      "timeMachine": true, 
      "reliable": true 
     }, 
      "name": "stargate", 
      "type": "Milky way gate", 
      "title": "Stargate + solar flare", 
      "timeMachine": true, 
      "reliable": false 
     } 
    ] 
1

如果你在閱讀的http://www.json.org/ JSON規範,你會碰到這條線 - 一個目的是一組無名稱/值對

因此,它不是明智的信任對象中的鍵的順序。把它聲明爲一個數組,你可以訂購。