2017-02-19 56 views
0

我有以下的JSON對象:如何使用JavaScript .forEach得到迭代JSON對象和JSON數組

var json = {"tsn": { 
    "settings": 
     {"app_name": "TSN", "version": "1.0"}, 
    "occurrences": 
     ["Party", "Music"] 
    } 
}; 

我真的不明白,爲什麼我不能像這樣訪問它的值:

json.tsn.forEach(function(item){ 
    console.log(item.settings.app_name); 
    console.log(item.occurrences); 
}); 

我得到json.tsn.forEach is not a function

+0

因爲'forEach'是數組方法,而'json.tsn'是一個不是數組的對象 – charlietfl

+0

你真的需要一個循環嗎?或者只是'console.log(json.tsn.settings.app_name)'? – charlietfl

+0

是的,我確實需要一個循環,因爲這是一個具有更多數據的API的輸出。 – Nicero

回答

1

forEach是一種可用於數組的方法;它對於非數組對象不存在。

事實上,你不需要迭代你正在做的事情。只是這樣做:

var item = json.tsn; 
console.log(item.settings.app_name); 
console.log(item.occurrences); 

或者,您可以使用Object.keys獲取鍵的數組,然後你可以繼續這樣的:

Object.keys(json.tsn).forEach(function(key){ 
    var item = json.tsn[key]; 
    console.log(item); 
}); 
+0

日誌不會爲這兩個工作,因爲項目是依賴於密鑰 – charlietfl

+0

正確的,我只是用一個簡單的日誌取而代之。謝謝。 – trincot

+0

是的,正如我上面評論所說,我需要循環。我不知道'object.keys'。我的Javascript知識是非常基礎的。 – Nicero

1

forEach方法不是the Object specification一部分。

要遍歷對象的可枚舉屬性,應該使用for...in語句。

var json = { 
    "tsn": { 
     "settings": { 
      "app_name": "TSN", 
      "version": "1.0" 
     }, 
     "occurrences": ["Party", "Music"] 
    } 
}; 

for (var prop in json) { 
    console.log(json[prop].settings.app_name); 
    console.log(json[prop].occurrences); 
} 

請參閱for...in statement reference