2010-10-20 55 views
1

下面是一個JSON字符串的一部分從服務器返回:原型JSON到對象

{ 
    col1: { 
      caption: 'Workspace', 
      combodata: { 
         c_0: { 
           id: 0, 
           value: 'Filter...' 
          }, 
         c_1: { 
           id: 1, 
           value: 'Tax' 
          }, 
         c_2: { 
           id: 2, 
           value: 'HR' 
          } 
         } 
     } 
} 

EVAL後,我可以訪問.caption,和.combodata在螢火蟲是可見爲對象,與C_0和C_1可見作爲.combodata中的對象,在c_0和c_1中均使用id和value。

如何分步處理.combodata中的每個對象?我試過.combodata.each(c),但是會引發異常。在運行時我不會知道.combodata中的對象的名稱。

回答

3

您可以使用一個普通for循環:

for(var key in obj.col1.combodata) { 
    var combo_obj = obj.col1.combodata[key]; 
    ... 
} 
1

如果

var result = {col1: { caption: 'Workspace',combodata: {c_0: {id: 0,value: 'Filter...'},c_1: {id: 1, value: 'Tax'},c_2: {id: 2, value: 'HR'}}}}; 

然後

for (i in result.col1.combodata) { 
    var item = result.col1.combodata[i]; 
    //Do stuff with item 
} 
2

我可以建議你不這樣做的eval()是這樣的JSON回?你應該做的是:

var jsondata = { ... }; 
var obj = JSON.parse(jsondata); 

原因是因爲評估一個字符串可能是危險的。試想一下,如果你的JSON數據是這樣的:

"{ some json data here }; alert(document.cookie)" 

當你EVAL的是,用戶的cookie被顯示給他們。現在想想如果不是提醒,會發生什麼情況,將該cookie發佈到攻擊者URL。如果存在,他們現在可以訪問該用戶帳戶。

+0

'JSON.parse'是在舊的瀏覽器無法使用;如果你想支持這些瀏覽器,你應該考慮包含json2庫(http://json.org/json2.js)。 – Matt 2010-10-20 10:50:39

+0

在這種情況下,返回的數據描述了使用JScript創建的網格的結構,並且不會包含惡意代碼。一般來說,你當然是對的。 – 2010-10-21 12:11:32

0

我發現下面的工作以及和會使用這樣的:

Object.values(col1.combodata).each(function(c2) { 
      id = c2.id; 
});