jQuery如何通过多个循环从json获取数据

时间:2016-08-14 03:25:01

标签: jquery json

我有这样的json数据http://pastebin.com/k3a5UNsL enter image description here 使用json formater查看时,我想在 possible_persons 对象中使用jquery获取存储在对象上的数据。

我试图循环访问数据,但是如何弄清楚如何获取数据名称,性别,地址等... enter image description here enter image description here

当我使用此代码时

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);
        });
    });
}

我得到第一个循环结果的警报值的结果,如图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 个答案:

答案 0 :(得分: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"))
}

编辑:使用arrow functions您可以合并此人的数据:

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'));
}

答案 1 :(得分:1)

我看到的第一个问题是,在您的第二个循环中,sec_key是文本"names"(以及您的其他属性。如果您想循环覆盖名称,请替换为:< / p>

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

第二个问题:并非所有relationship都拥有属性names,因此您需要检查以下内容:

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

最后每个&#34;名称&#34;是一个具有第一个和最后一个属性的对象。如果您提醒某个对象,您将无法查看实际名称。您应确保已设置的display属性或重建字符串

将所有这些结合在一起:

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