我使用ajax调用将json从服务器传递到客户端。 json具有以下结构:
var data =
{
"2001":{"name":"tom", "age":33, "pos":"mk"},
"3602":{"name":"cindy", "age":56, "pos":"cs"},
"1060":{"name":"mike", "age":23, "pos":"mg"}
}
我正在尝试使用jquery中的$ .each迭代对象来访问嵌套对象中的“name”和“pos”。出于某种原因,我甚至无法通过对象的第一级(即“2001”,“3602”,......),更不用说深入了解它。这是我用来简单地提醒数字键的语法。
$.each(data, function(id, object){
alert(data[key]);
});
执行此代码时没有任何反应。因此,当我尝试运行以下代码来访问所有名称时,没有任何事情发生:
$.each(data, function(id, object){
$.each(object, function(key, value){
alert(data[key].name);
});
});
我知道javascript不喜欢数字键,但我看到其他人使用数据[“2001”]访问数字键中的数据,因此似乎可以循环使用这种结构的json。非常感谢任何帮助。
答案 0 :(得分:0)
简单......
$.each(data, function(id, object){
alert(data[id].name);
alert(data[id].pos);
});
答案 1 :(得分:0)
那是因为您使用参数名称id
和object
,然后在函数中使用变量key
,而不是id
参数
使用id
参数获取索引:
$.each(data, function(id, object){
alert(data[id]);
});
或直接使用object
参数:
$.each(data, function(id, object){
alert(object);
});
在第二个代码中,您正在外部循环中正确使用object
参数,但之后您尝试使用data[key]
而不是object[key]
来访问内部循环中的成员。< / p>
使用object
参数访问内部对象:
$.each(data, function(id, object){
$.each(object, function(key, value){
alert(object[key].name);
});
});
或直接使用value
参数:
$.each(data, function(id, object){
$.each(object, function(key, value){
alert(value.name);
});
});
答案 2 :(得分:0)
试试这个 -
$.each(data, function (id, object) {
console.log(object.name);
$.each(object, function (key, value) {
console.log(key +"-"+value);
});
});
演示------>
http://jsfiddle.net/GBntj/2/
答案 3 :(得分:0)
在您的第一个示例中,未定义key
。这应该是data[id]
,但实际上与object
相同,后者具有您要查找的name
值。
$.each(data, function(id, object){
console.log(object.name);
});
这足以解决问题,但让我们讨论为什么你的第二个例子也是错误的。您正在迭代object
,但您仍在尝试引用data
。 key
中的object
与data
中的data[key]
不同,因此内循环上的object[key].name
不存在。使用object
也不正确,因为 name
具有{{1}}属性,而不是其元素。