开发者问题收集

jQuery 如何使用多重循环从 json 获取数据

2016-08-14
223

我有这样的 json 数据 http://pastebin.com/k3a5UNsL 在此处输入图片说明 当使用 json 格式化程序查看时,我想使用 jquery 在 possible_persons 对象内获取存储在对象上的数据。

我试图循环访问数据,但不清楚如何获取数据名称、性别、地址等... 输入图片说明这里” src= 在此处输入图片描述

当我使用这段代码时

function build_possible_persons(result) {
    var relationship = result['possible_persons'];
    $.each(relationship, function(key, value) {
        $.each(value, function(sec_key, sec_value) {
            alert(sec_value);
        });
    });
}

我得到了第一个循环结果的alert值,如图0:25所示,3788825f48716e6c....,[object],[object],等等....

我怎样才能对其中的对象进行循环以获取我想要的值? 我尝试

function build_possible_persons(result) {
    var relationship = result['possible_persons'];
    $.each(relationship, function(key, value) {
        $.each(value, function(sec_key, sec_value) {
            $.each(sec_key.names, function(third_key, third_value) {
                alert(third_key);
            });
        });
    });
}

或使用

alert(sec_key.names[0].display);

但没有成功。我创建的代码没有显示任何结果。

请帮忙查看我的代码中的缺陷。谢谢

2个回答

使用 Array.prototype.map() 可能会更简单。

function build_possible_persons(result) {
    var persons = result.possible_persons;
    alert(persons.map(p => p.addresses ? p.addresses[0].display : 'N/A').join("\n"))
}

编辑: 使用 箭头函数 ,您可以像这样合并人员的数据:

function build_possible_persons(result) {
  var persons = result.possible_persons;
  var rows = persons.map(p => {
    var address = p.addresses ? p.addresses[0].display : 'N/A';
    var name = p.names ? p.names[0].display : 'N/A'
    return name + ' ' + address; 
  });

  alert(rows.join('\n'));
}
Santiago Hernández
2016-08-14

我看到的第一个问题是,在第二个循环的 sec_key 中是文本 “names” (以及您的其他属性。如果要循环遍历名称,请替换为:

$.each(value['names'], function(j, name)

第二个问题:并非所有 relationship 都具有属性 names ,因此您需要检查这一点:

if(value['names']) {
    $.each(value['names'], function(....

最后,每个“name”都是具有 first 和 last 属性的对象。如果您提醒一个对象,您将看不到实际的名称。您应该确保已设置 display 属性或重建字符串

将它们全部放在一起:

$.each(relationship, function(i, value) {
    if (value['names'] !== undefined) {
        $.each(value['names'], function(j, name) {
            console.log(name.display);
        });
    }
});
Assimilater
2016-08-14