0

我使用 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 不喜欢数字键,但我看到其他人使用 data["2001"] 访问数字键中的数据,因此似乎可以循环以这种方式构造的 json。任何帮助深表感谢。

4

4 回答 4

0

这很简单....

 $.each(data, function(id, object){
  alert(data[id].name);
  alert(data[id].pos);
  });
于 2013-06-22T19:47:44.723 回答
0

那是因为您使用了参数名称idand 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]

使用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);
  });
});
于 2013-06-22T19:47:52.903 回答
0

尝试这个 -

$.each(data, function (id, object) {
     console.log(object.name);
    $.each(object, function (key, value) {
        console.log(key +"-"+value);
    });
});

演示------> http://jsfiddle.net/GBntj/2/

于 2013-06-22T19:47:58.623 回答
0

在您的第一个示例中,key未定义。这可能应该是data[id],但实际上与 相同object,它具有name您正在寻找的值。

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

这足以解决问题,但让我们讨论一下为什么您的第二个示例也是错误的。您正在迭代object,但您仍在尝试引用data. 中的keys 与object中的不同data,因此data[key]内部循环不存在。使用object[key].name也是不正确的,因为它object具有name属性,而不是其元素。

于 2013-06-22T19:50:30.493 回答