2015-09-07 55 views
1

我正在努力使用Nest API及其對結構的JSON響應。我想要一個結構對象列表,但是Nest做了多個名爲結構ID的屬性。對我來說,看起來實施這個的人完全誤解了如何使用JSON。我希望能夠讓Nest API返回更合理的JSON結構。有什麼方法可以從Nest獲得更多對列表友好的JSON repsonse?如果是這樣,怎麼樣?將巢結構作爲一個列表?

這是鳥巢如何返回結構:

{ 
    "structures": { 
     "VqFabWH21nwVyd4RWgJgNb292wa7hG_dUwo2i2SG7j3-BOLY0BA4sw": { 
      "structure_id": "VqFabWH21nwVyd4RWgJgNb292wa7hG_dUwo2i2SG7j3-BOLY0BA4sw", 
      "thermostats": [ 
       "peyiJNo0IldT2YlIVtYaGQ" 
      ], 
      "smoke_co_alarms": [ 
       "RTMTKxsQTCxzVcsySOHPxKoF4OyCifrs" 
      ], 
      "devices": {}, 
      "away": "home", 
      "name": "Home", 
      "country_code": "US", 
      "postal_code": "94304", 
      "peak_period_start_time": "2015-10-31T23:59:59.000Z", 
      "peak_period_end_time": "2015-10-31T23:59:59.000Z", 
      "time_zone": "America/Los_Angeles", 
      "eta": {}, 
      "wheres": { 
       "Fqp6wJI...": { 
        "where_id": "Fqp6wJI...", 
        "name": "Bedroom" 
       } 
      } 
     } 
    } 
} 

這是我想得相反:

{ 
    "structures": [ 
     { 
      "structure_id": "VqFabWH21nwVyd4RWgJgNb292wa7hG_dUwo2i2SG7j3-BOLY0BA4sw", 
      "thermostats": [ 
       "peyiJNo0IldT2YlIVtYaGQ" 
      ], 
      "smoke_co_alarms": [ 
       "RTMTKxsQTCxzVcsySOHPxKoF4OyCifrs" 
      ], 
      "devices": [], 
      "away": "home", 
      "name": "Home", 
      "country_code": "US", 
      "postal_code": "94304", 
      "peak_period_start_time": "2015-10-31T23:59:59.000Z", 
      "peak_period_end_time": "2015-10-31T23:59:59.000Z", 
      "time_zone": "America/Los_Angeles", 
      "eta": {}, 
      "wheres": [ 
       { 
        "where_id": "Fqp6wJI...", 
        "name": "Bedroom" 
       } 
      } 
     ] 
    } 
} 
+0

沒有什麼不對的地方,這就是所謂的關聯數組。之前也有人問過,例如這裏:http://stackoverflow.com/questions/6047460/how-to-loop-through-an-json-associative-array-in-javascript細節取決於你的編程環境 –

+0

「它沒有錯」。也許。但是,你能向我解釋一下在哪種情況下使用關聯數組是合理的嗎?在這種情況下,非常清楚的是,它使用的是完全相同類型的對象,並且數據在列表中是有意義的。爲什麼有人會使用關聯數組而不是使用列表? –

+0

@ThomasClemensen您可以在一個對象上進行O(1)查找,這個查找包含一個與順序無關的唯一標識數據(該結構對象不是)。在視圖中執行id並將其細節與原始對象的單一副本進行協調,而無需遍歷數組或在原始數據結構上保留順序。無論哪種方式JSON旨在通過對象定義來表示關聯數組,因此它本身不是「錯誤的」。 –

回答

2

沒有什麼不對的JSON,你看到了什麼叫做associative array ,這是一種收集形式,就像數組,列表或集合一樣。在JSON中,關聯數組可以表示爲對象{}。這是一個非常基本的數據結構,以許多名稱而聞名,包括Map或Dictionary,取決於所使用的編程語言。

是否使用關聯數組或列表很大程度上取決於您希望訪問項目的方式。它與存儲在集合中的對象的類型沒有任何關係。

通常,如果您想通過鍵值和「普通」數組/列表訪問項目(如果要按位置訪問項目),通常會使用關聯數組。如果項目的順序很重要,「常規」數組/列表通常也會更好,而關聯數組通常不會被排序(儘管它們可能取決於實現細節)。

大多數編程環境允許您迭代關聯數組的鍵值列表,從而允許類似訪問「普通」數組/列表。

下面是在JavaScript一個簡單的例子:

var c; 
c = [1, 2]; // ordinary array 
c[0]; // access by position 

var i; 
for (i = 0; i < c.length; ++i) { // loop through all items and ... 
    console.log(c[i]); // access by position 
} 

c = {"key1": 1, "key2": 2}; // associative array 
c.key2; // access by key 

var key; 
for (key in c) { // iterate over all keys and ... 
    console.log(c[key]); // access by key value 
} 
相關問題