使用$ .each用数字键迭代json

时间:2013-06-22 19:41:02

标签: jquery json each

我使用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。非常感谢任何帮助。

4 个答案:

答案 0 :(得分:0)

简单......

 $.each(data, function(id, object){
  alert(data[id].name);
  alert(data[id].pos);
  });

答案 1 :(得分:0)

那是因为您使用参数名称idobject,然后在函数中使用变量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,但您仍在尝试引用datakey中的objectdata中的data[key]不同,因此内循环上的object[key].name不存在。使用object也不正确,因为 name 具有{{1}}属性,而不是其元素。