0

我有以下 json 数据:

[{"id":"1","name":"vm"},{"id":"2","name":"live"}] 

这是我必须解析的代码:

$.getJSON('<%= path to my method%>',function(data) {
    console.log(data);  
    $.each(data, function(i, item) {                      
                   console.log(item[i].id);
           console.log(item[i].name);
    }); //end .each

});//end getJSON.       

以下是控制台中的结果:

LOG: [{"id":"1","name":"vm"},{"id":"2","name":"live"}] 
LOG: undefined 
LOG: undefined 
SCRIPT5007: Unable to get value of the property 'id': object is null or undefined 

我发现这篇文章: jquery loop on Json data using $.each

所以我试图改变我的代码看起来像:

function(data) {
    console.log(data);  
    $.each(data, function(i, item) {
         console.log(data[i].id);
             console.log(data[i].name);
    }); //end .each

和这个:

function(data) {
    console.log(data);  
    $.each(data, function(i, item) {
    console.log(item.id);
    console.log(item.name);
    }); //end .each

但是我一直不确定 id 和名称。

你能告诉我哪里出错了吗?谢谢。

编辑 1

function(data) {
       $.parseJSON(data);
       console.log(data);  
       $.each(data, function(i, item) {
             console.log(item.id);
             console.log(item.name);
        }); //end .each
4

4 回答 4

1

IIRC

$.each(data,function(i,item) 

应该

$.each(data,function(i)

那么你可以在循环中使用 this.id 和 this.name 。即使您的解决方案被证明是有效的,使用我的解决方案仍然会更快,因为使用 data[i] 将比仅使用 'this' 慢

于 2013-06-12T19:10:58.183 回答
1

使用时.eachi是索引,item是值。没必要item[i],就像你做的那样for..in

$.each(data, function(i, item) {                      
    console.log(item.id);
    console.log(item.name);
});
于 2013-06-12T19:16:02.143 回答
0

您的 JSON 作为字符串而不是 JSON 对象通过,因此您无法访问其属性。

使用 . 将 JSON 字符串转换为实际对象$.parseJSON()

data = $.parseJSON(data);

以上应该可以解决问题。

如果您的 JSON 源可能不可靠,我建议使用 try/catch 块来防止无效的 JSON 破坏您的 javascript:

try {
    data = $.parseJSON(data);
} catch(errors) {
    console.log(errors);
}

最后,如果您控制 JSON 的来源,您可以在响应中设置标头,application/json并且 jQuery 应该自动将响应转换为 JSON 对象。

于 2013-06-12T19:22:30.620 回答
0

尝试这个:

$.each(data, function() {
    console.log(this.id);
    console.log(this.name);
});
于 2013-06-12T19:19:50.437 回答