JSON - 对象中数组中的对象 - 如何使用JS解析循环?

时间:2018-05-07 22:25:40

标签: javascript arrays json parsing

如果我有这个架构:

[{
    "Id": 2,
    "Prizes": [{
        "Id": 5,
        "Status": 0,
        "ClaimCode": "PN0016CXC1WPM64P",
        "User": {
            "FirstName": "John",
            "SecondName": "Doe",
        },
        "DrawId": 2,
        "PrizeId": 22,
        "Prize": null
    }]
}]

我怎样才能获得数组奖品中的对象User下的名字或任何值,即主JSON中的?

我试过这个:

 const response = JSON.parse(this.responseText);
 response.Prizes[0].User.forEach(function(a) {
     output += `<li>${a.FirstName}</li>`;
 });

但是未定义错误,我相信它可以被提取但只需要正确的语法。或者这不能用for循环来完成?

3 个答案:

答案 0 :(得分:1)

首先,响应是一个数组,用户是一个对象,这应该是有用的:

const response = JSON.parse(this.responseText);

response.map((resp) => {
    resp.Prizes.map((prize) => {
        output += `<li>${prize.User.FirstName}</li>`;

    })
})

答案 1 :(得分:0)

由于您有一个对象数组,并且在对象内部有一个值数组(Prizes),您可以使用嵌套的Array.forEach()调用来获取内部值,用字符串包装它们,以及推送到items数组:

&#13;
&#13;
const response = [{"Id":2,"Prizes":[{"Id":5,"Status":0,"ClaimCode":"PN0016CXC1WPM64P","User":{"FirstName":"John","SecondName":"Doe"},"DrawId":2,"PrizeId":22,"Prize":null}]}];

const items = [];

response.forEach((o) => 
  o.Prizes.forEach((p) =>
    items.push(`<li>${p.User.FirstName}</li>`)
  ));
  
list.innerHTML = items.join('');
&#13;
<ul id="list"></ul>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

由于您有多维数组,因此需要在数组内部使用Prizes

首先,您可以使用reduce()Spread_syntax将所有Prizes合并为一个,然后使用map()加入mehod以获得所需的结果。

<强>样本

const response = [{"Id":2,"Prizes":[{"Id":5,"Status":0,"ClaimCode":"PN0016CXC1WPM64P","User":{"FirstName":"John","SecondName":"Doe"},"DrawId":2,"PrizeId":22,"Prize":null}]}];

let res = response.reduce((r,{Prizes}) =>[...r,...Prizes],[]).map(({User})=>`<li>${User.FirstName}</li>`).join('');

document.querySelector('ul').innerHTML =res ;
<ul></ul>