原型JSON到Object

时间:2010-10-20 10:34:23

标签: javascript json prototype

以下是从服务器返回的JSON字符串的一部分:

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

在评估之后,我可以访问.caption,并且.combodata在Firebug中可见为对象,其中c_0和c_1可视为.combodata内的对象,其中id和值均为c_0和c_1。

如何逐步浏览.combodata中的每个对象?我尝试了.combodata.each(c),但是引发了异常。在运行时我不知道.combodata中对象的名称。

4 个答案:

答案 0 :(得分:3)

您可以使用常规for循环:

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

答案 1 :(得分:2)

我可以建议您不要eval()返回的JSON吗?你应该做的是:

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

原因是因为评估字符串可能很危险。想象一下,如果您的JSON数据如下所示:

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

当你评估它时,会向他们显示用户cookie。现在想想如果不是警报,会将该cookie发布到攻击者URL,会发生什么。他们现在可以访问该用户帐户(如果存在)。

答案 2 :(得分: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
}

答案 3 :(得分:0)

我发现以下内容也可以使用:

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