从JSON嵌套数组中检索内容

时间:2012-09-11 14:10:11

标签: javascript jquery 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"
            ]
        }
    }
]

我可以使用.each迭代器函数轻松访问别名和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显示图形。

感谢您的帮助,

3 个答案:

答案 0 :(得分: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 ];
});

答案 1 :(得分:1)

结果将包含所需的数组。

var result = [];

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

答案 2 :(得分:0)

将数据转换为元素,比如数据 然后

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