繁体   English   中英

如何将 JSON 数组有效负载转换为具有特定字段的对象和具有日期的数组?

[英]How can i convert a JSON array payload into one object with specific fields and an array with dates?

我有一个从后端获取的 JSON 有效负载。 数据包含一个带有对象的payload数组。 通过某种方式,我想将数组内的这些对象转换为一个对象,并将selectedDate日期转换为自己的数组。 JSON 有效负载如下所示:

{
"success": true,
"payload": [
    {
        "weekNumber": 40,
        "sortOrder": 1,
        "label": "autumn",
        "numberOfPossibleDays": 3,
        "editable": true,
        "selectedDate": "2020-09-29",
        "deliveryDays": [
            {
                "date": "2020-09-28",
                "contactPerson": null,
                "phoneNumber": null,
                "contactPerson2": null,
                "phoneNumber2": null,
                "selected": false
            },
            {
                "date": "2020-09-29",
                "contactPerson": "John",
                "phoneNumber": "99887744",
                "contactPerson2": "Tom",
                "phoneNumber2": "40040000,
                "selected": true
            },
            {
                "date": "2020-09-30",
                "contactPerson": null,
                "phoneNumber": null,
                "contactPerson2": null,
                "phoneNumber2": null,
                "selected": false
            }
        ]
    },
    {
        "weekNumber": 53,
        "sortOrder": 2,
        "label": "christmas",
        "numberOfPossibleDays": 2,
        "editable": true,
        "selectedDate": "2020-12-29",
        "deliveryDays": [
            {
                "date": "2020-12-28",
                "contactPerson": null,
                "phoneNumber": null,
                "contactPerson2": null,
                "phoneNumber2": null,
                "selected": false
            },
            {
                "date": "2020-12-29",
                "contactPerson": "Doe,
                "phoneNumber": "99999999",
                "contactPerson2": "Foo",
                "phoneNumber2": "44552200",
                "selected": true
            }
        ]
    }
  ]
}

我想要做的是获得这样的输出对象:

{
    autumn=firstContactPersonName: "John",
    autumn=firstContactPersonPhone: "46442644",
    autumn=secondContactPersonName: "Tom",
    autumn=secondContactPersonPhone: "40040000"
    christmas=firstContactPersonName: "Doe",
    christmas=firstContactPersonPhone: "99999999",
    christmas=secondContactPersonName: "Foo",
    christmas=secondContactPersonPhone: "44552200"
}

日期输出应该是这样的数组:

const dateArray = ["autumn=2020-09-29", "christmas=2020-12-29"]

我希望它是动态的,因为有时我可能会有easter等对象。 我为什么要这样做是因为我使用对象来填充输入字段中的内容和dateArray以启用选择的日期。 我知道这不是最好的解决方案,但我必须尝试以这种方式解决。 我是 JavaScript 的新手,我在理解它时遇到了一些问题。 如果有人可以帮助我,我将不胜感激,好吗? 我希望这个问题和例子很好。 感谢您的帮助。

 let obj = { "success": true, "payload": [ { "weekNumber": 40, "sortOrder": 1, "label": "autumn", "numberOfPossibleDays": 3, "editable": true, "selectedDate": "2020-09-29", "deliveryDays": [ { "date": "2020-09-28", "contactPerson": null, "phoneNumber": null, "contactPerson2": null, "phoneNumber2": null, "selected": false }, { "date": "2020-09-29", "contactPerson": "John", "phoneNumber": "99887744", "contactPerson2": "Tom", "phoneNumber2": "40040000", "selected": true }, { "date": "2020-09-30", "contactPerson": null, "phoneNumber": null, "contactPerson2": null, "phoneNumber2": null, "selected": false } ] }, { "weekNumber": 53, "sortOrder": 2, "label": "christmas", "numberOfPossibleDays": 2, "editable": true, "selectedDate": "2020-12-29", "deliveryDays": [ { "date": "2020-12-28", "contactPerson": null, "phoneNumber": null, "contactPerson2": null, "phoneNumber2": null, "selected": false }, { "date": "2020-12-29", "contactPerson": "Doe", "phoneNumber": "99999999", "contactPerson2": "Foo", "phoneNumber2": "44552200", "selected": true } ] } ] } let results={}; let datesArray=[]; obj.payload.map((x)=>{ datesArray.push(x.label+"="+x.selectedDate); x["deliveryDays"].map((y)=>{ if(y.contactPerson){ let personKey = x.label + "=firstContactPersonName"; results[personKey] = y.contactPerson; let contactKey = x.label+"=firstContactPersonPhone"; results[contactKey] = y.phoneNumber; } if(y.contactPerson2){ let secondPersonKey = x.label + "=secondContactPersonName"; results[secondPersonKey] = y.contactPerson2; let secondContactKey = x.label+"=secondContactPersonPhone"; results[secondContactKey] = y.phoneNumber2; } }); }); console.log(datesArray) console.log(results)

我们通过有效载荷迭代并利用日期数组来存储日期和结果数组,以获取一个季节中的第一和第二联系人姓名。 希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM