我有以下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
答案 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对象。