以下是从服务器返回的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
中对象的名称。
答案 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;
});