2012-09-11 121 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); 
}