解析json数据失败的逻辑

时间:2013-06-12 19:04:37

标签: jquery json

我有以下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

但是我一直都没有为ids和名字定义。

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

编辑1

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

4 个答案:

答案 0 :(得分:1)

IIRC

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

应该是

$.each(data,function(i)

然后你可以在循环中使用this.id和this.name。 即使你的解决方案证明是有效的,使用我的解决方案仍然会更快,因为获取数据[i]将比使用'this'更慢

答案 1 :(得分:1)

使用.each时,i是索引,item是值。无需item[i],就像在for..in中一样。

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

答案 2 :(得分:0)

试试这个:

$.each(data, function() {
    console.log(this.id);
    console.log(this.name);
});

答案 3 :(得分:0)

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

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

data = $.parseJSON(data);

以上应该可以解决问题。

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

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

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