2017-02-19 62 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