2016-06-14 91 views
0

我正在使用返回數據的數據的API,其中我使用了JSON.Parse來使用數據。我能找到一個合適的數據的詳細信息,但是我希望能夠對那些細節鏈接到其所包含的對象如果對象名稱是數字,則使用JSON對象名稱

我用下面的代碼來收集我的數組和JSON解析:

var venue = JSON.parse(this.responseText); 
console.log(venue); 

它返回:Object {4293315: Array[108]}

然後我通過運行下面的代碼包含在 '4293315' 的陣列解析:

for(var person in venue) { 
    var personDetail = venue[person]; 

    for(detail in personDetail) { 
     if(personDetail[detail].max_rssi > maxRssi) { 
      venueDetails.push(personDetail[detail]); 
     } 
    }   
} 

var capacity = venueDetails.length; 
capacity --; 
console.log("capacity: " + capacity); 
var temp = JSON.stringify(venueDetails); 
console.log(venue +": " + temp); 

WHI CH回報:

capacity: 6 
[object Object]: [{"mac_id":12960837,"wifi_uid":null,"first_seen":"2016-06-14T00:13:23.000Z","last_seen":"2016-06-14T00:13:23.000Z","max_rssi":-55,"latest_rssi":-55,"frames":1},... 

的問題是,對象名稱是一個ID號,例如4293315,所以我收到一個錯誤,當我嘗試運行venue.4293315.name

有人可以幫我弄清楚如何存儲對象名稱,以便我可以將內部包含的值與對象關聯起來嗎?例如,我希望能夠將對象名稱存儲在鍵和值映射中,以便稍後可以詢問每個對象或ID的容量信息。

+2

'場地[ '4293315']。name'? – zerkms

+0

我不會總是知道括號內的ID號碼。所以我想我的問題是,我如何存儲這個數字以用於這種情況? – Mark

+0

'venue [id] .name'? – zerkms

回答

0

您可以通過執行程序獲取名稱的值:

var objectNames = Object.keys(venue); // gives an array of the keys 

假設你知道只有一個:

var id = objectNames[0]; 

然後你就可以訪問使用id屬性爲其他人已經表明。

+0

這一個爲我工作。謝謝!這仍然可以在返回的JSON對象中包含許多不同的元素嗎? – Mark

+0

是的!它會爲您提供所有頂級密鑰,而不管它們的格式是多少或什麼格式。 –

0

您可以使用venue[4293315].name來訪問場地的名稱。

如果你真的想使用的格式問題訪問值,可以追加一個字符串「ID」(或任何你喜歡)每個ID號碼的開頭。然後你可以使用venue.id4293315.name

0

訪問對象中的數字時,或者您需要基於變量獲取對象中的項目時,請使用括號表示法。

object.property被稱爲點表示法和可以使用,在大多數情況下,如果物業不以數字開頭。

object[property]被稱爲括號標記,可用於訪問沒有資格作爲一個常規的變量名稱的屬性。


myObj = { 
    'hello': 'world', 
    '17921': 'foo' 
} 

在這個例子中,你可以訪問myObj.hello正常,但必須使用myObj[17921]訪問編號的名稱,通常不計爲有效的JS變量名。

在同樣的權利,如果您有一個變量名爲numberId等於17921,您可以通過使用myObj[numberId]獲得相同的號碼。

+0

「常規變量名稱」---我甚至稱它爲「標識符」(根據標準) – zerkms

+0

謝謝。那麼問題就變成了,我要如何在numberID變量中存儲「17921」以便在特定情況下使用? – Mark

+0

您是否在問如何從JSON響應中獲取屬性的名稱?如果是這樣,一個快速和粗略的想法......(因爲我在場地){numberId = i; }'。運行該代碼後,'numberId'將是該屬性名稱的任何數字;假設它是唯一的財產。 – MineAndCraft12