2012-09-11 71 views
0

我有一个JSON响应看起来像这样检索从JSON嵌套数组内容

[ 
    { 
     "alias": "Server1", 
     "hostgroup_worst_service_state": "0", 
     "status_history": { 
      "status": [ 
       "0", 
       "2", 
       "0", 
       "0" 
      ] 
     } 
    }, 
    { 
     "alias": "Server2", 
     "hostgroup_worst_service_state": "0", 
     "status_history": { 
      "status": [ 
       "0", 
       "0", 
       "0", 
       "0" 
      ] 
     } 
    }, 
    { 
     "alias": "Server3", 
     "hostgroup_worst_service_state": "0", 
     "status_history": { 
      "status": [ 
       "1", 
       "1", 
       "1", 
       "0" 
      ] 
     } 
    } 
] 

我可以很容易地使用。每个迭代函数访问别名和hostgroup_worst_state:

$.each(data, function(i, item) { 
    console.log(item.alias) 
    console.log(item.hostgroup_worst_service_state) 
} 

但是我很难有权访问状态数据。我需要以这种方式显示它们:

["0","2","0","0"] 
["0","0","0","0"] 
["1","1","1","1"] 

这些值将用于显示使用jQuery Sparklines的图形。

感谢您的帮助,

+0

坎。你看过很多相关的问题吗?如果是这样,问题是什么? –

+1

'item.status_history.status'不会给你一个数组吗? – simonlchilds

回答

3

你有对象的数组,每个对象有一个名为status_history属性,它指向有一个名为status属性,它包含您所需的阵列的另一个对象。因此,为了访问该阵列中,使用下面的:

$.each(data, function() { 
    console.log(this.status_history.status); 
}); 

注意this内部.each()每个对象/值你迭代。这是使用下面的等价:

$.each(data, function (i, item) { 
    console.log(item.status_history.status); 
}); 

另外,如果你想阵列给出状态数据的数组,你可以使用$.map()

var arr = $.map(data, function (el) { 
    return [ el.status_history.status ]; 
}); 
+0

大家好,谢谢。我是在正确的方式,但我的错误是在别的地方。然而赞成的解释。它清除了我的疑惑,并在一定程度上解决了我的问题。 – Moustache

1

结果将包含所需的阵列。

var result = []; 

for(var i = 0; i < data.length; i++) { 
    result.push(data[i].status_history.status); 
} 
+0

有效答案也是如此。谢谢 – Moustache

0

把你的数据元素,数据说,然后

for(i=0;i<data.length;i++) 
{ 
console.log(data.status_history.status); 
}