简体   繁体   中英

How do I iterate through an json object that has nested objects to get the data I need

I have a json object and I need to get two pieces of data from nested objects within it.

Here is the json object

 { "versionRoomPoolList": [{ "roomPoolDisplayId": 1, "roomPoolStatus": "NOCHANGE", "roomPoolCode": "GENR", "miosSRC": "YA", "sna": "N", "maxOccupancyStatus": "NOCHANGE", "newMaxOccupancy": 2, "currentMaxOccupancy": 2, "capacityStatus": "NOCHANGE", "newCapacity": 0, "currentCapacity": 0, "excludeAlways": false, "excludeOverAuth": false, "propertySellOnly": false, "versionRoomTypeList": [{ "roomTypeDisplayOrderId": 1, "roomTypeId": 1, "roomTypeStatus": "NOCHANGE", "roomPool": "GENR", "maxOccupancyStatus": "NOCHANGE", "newMaxOccupancy": 2, "currentMaxOccupancy": 2, "capacityStatus": "NOCHANGE", "newCapacity": 0, "currentCapacity": 0, "guaranteed": 0, "minAvailability": null, "premium": false, "eliteAvailability": false, "pmsRoomType": null, "isROH": false, "versionRoomTypeAttributeList": [{ "attributeDisplayId": 1, "attributeStatus": "NOCHANGE", "attributeCode": "GU", "attributeDescription": "Guest Room" }] }] }, { "roomPoolDisplayId": 2, "roomPoolStatus": "NOCHANGE", "roomPoolCode": "DLUX", "miosSRC": "YB", "sna": "N", "maxOccupancyStatus": "NOCHANGE", "newMaxOccupancy": 2, "currentMaxOccupancy": 2, "capacityStatus": "NOCHANGE", "newCapacity": 238, "currentCapacity": 238, "excludeAlways": false, "excludeOverAuth": false, "propertySellOnly": false, "versionRoomTypeList": [{ "roomTypeDisplayOrderId": 2, "roomTypeId": 20, "roomTypeStatus": "NOCHANGE", "roomPool": "DLUX", "maxOccupancyStatus": "NOCHANGE", "newMaxOccupancy": 3, "currentMaxOccupancy": 3, "capacityStatus": "NOCHANGE", "newCapacity": 6, "currentCapacity": 6, "guaranteed": 4, "minAvailability": 1, "premium": false, "eliteAvailability": false, "pmsRoomType": null, "isROH": false, "versionRoomTypeAttributeList": [{ "attributeDisplayId": 1, "attributeStatus": "NOCHANGE", "attributeCode": "GU", "attributeDescription": "Guest Room" }, { "attributeDisplayId": 4, "attributeStatus": "NOCHANGE", "attributeCode": "HF", "attributeDescription": "High Floor, 11th floor and above" }, { "attributeDisplayId": 3, "attributeStatus": "NOCHANGE", "attributeCode": "KN", "attributeDescription": "1 King Bed" }, { "attributeDisplayId": 2, "attributeStatus": "NOCHANGE", "attributeCode": "SB", "attributeDescription": "Sofabed" }, { "attributeDisplayId": 5, "attributeStatus": "NOCHANGE", "attributeCode": "SE", "attributeDescription": "Separate Shower and Bathtub" } ] }] } ] }

There are two pieces of data I am trying to get and place into columns in a data grid. The first value are from the key versionRoomPoolList.roomPoolCode and versionRoomPoolList.versionRoomTypeList.versionRoomTypeAttributeList.attributeCode

I am trying to do this using for loops here is what I have so far:

 var v2 = versionRoomPools; roomPool, roomTypes, roomType, i, k = [], j; for (i = 0; (roomPool = v2.versionRoomPoolList[i]); i++) { k.push(roomPool); roomTypes = roomPool.versionRoomTypeList; for (j = 0; (roomType = roomTypes[j]); j++) { k.push(roomType); } }

I am getting stuck on how to iterate through the nested objects.

You should access your objects like this.

console.log(data.versionRoomPoolList[0].roomPoolCode); // roomPoolCode
data.versionRoomPoolList[0].versionRoomTypeList[0].versionRoomTypeAttributeList.forEach(v => {
    console.log(v)
})

We can also loop through all the keys and if it is a nested object recall the function.

function search(o) {
    Object.keys(o).forEach(function (k) {
        console.log('Searched', o, o[k]);
        if (o[k] !== null && typeof o[k] === 'object') {
            search(o[k]);
            return;
        }
        console.log(o[k] === o['roomPoolCode']); // Logic
        if (o[k] === o['roomPoolCode'] {
            // Do whatever with it
        }
        return o[k];
    });
}

 let data = { "versionRoomPoolList": [{ "roomPoolDisplayId": 1, "roomPoolStatus": "NOCHANGE", "roomPoolCode": "GENR", "miosSRC": "YA", "sna": "N", "maxOccupancyStatus": "NOCHANGE", "newMaxOccupancy": 2, "currentMaxOccupancy": 2, "capacityStatus": "NOCHANGE", "newCapacity": 0, "currentCapacity": 0, "excludeAlways": false, "excludeOverAuth": false, "propertySellOnly": false, "versionRoomTypeList": [{ "roomTypeDisplayOrderId": 1, "roomTypeId": 1, "roomTypeStatus": "NOCHANGE", "roomPool": "GENR", "maxOccupancyStatus": "NOCHANGE", "newMaxOccupancy": 2, "currentMaxOccupancy": 2, "capacityStatus": "NOCHANGE", "newCapacity": 0, "currentCapacity": 0, "guaranteed": 0, "minAvailability": null, "premium": false, "eliteAvailability": false, "pmsRoomType": null, "isROH": false, "versionRoomTypeAttributeList": [{ "attributeDisplayId": 1, "attributeStatus": "NOCHANGE", "attributeCode": "GU", "attributeDescription": "Guest Room" }] }] }, { "roomPoolDisplayId": 2, "roomPoolStatus": "NOCHANGE", "roomPoolCode": "DLUX", "miosSRC": "YB", "sna": "N", "maxOccupancyStatus": "NOCHANGE", "newMaxOccupancy": 2, "currentMaxOccupancy": 2, "capacityStatus": "NOCHANGE", "newCapacity": 238, "currentCapacity": 238, "excludeAlways": false, "excludeOverAuth": false, "propertySellOnly": false, "versionRoomTypeList": [{ "roomTypeDisplayOrderId": 2, "roomTypeId": 20, "roomTypeStatus": "NOCHANGE", "roomPool": "DLUX", "maxOccupancyStatus": "NOCHANGE", "newMaxOccupancy": 3, "currentMaxOccupancy": 3, "capacityStatus": "NOCHANGE", "newCapacity": 6, "currentCapacity": 6, "guaranteed": 4, "minAvailability": 1, "premium": false, "eliteAvailability": false, "pmsRoomType": null, "isROH": false, "versionRoomTypeAttributeList": [{ "attributeDisplayId": 1, "attributeStatus": "NOCHANGE", "attributeCode": "GU", "attributeDescription": "Guest Room" }, { "attributeDisplayId": 4, "attributeStatus": "NOCHANGE", "attributeCode": "HF", "attributeDescription": "High Floor, 11th floor and above" }, { "attributeDisplayId": 3, "attributeStatus": "NOCHANGE", "attributeCode": "KN", "attributeDescription": "1 King Bed" }, { "attributeDisplayId": 2, "attributeStatus": "NOCHANGE", "attributeCode": "SB", "attributeDescription": "Sofabed" }, { "attributeDisplayId": 5, "attributeStatus": "NOCHANGE", "attributeCode": "SE", "attributeDescription": "Separate Shower and Bathtub" } ] }] } ] } function search(o,) { Object.keys(o).forEach(function (k) { console.log('Searched', o, o[k]); if (o[k] !== null && typeof o[k] === 'object') { search(o[k]); return; } console.log(o[k] === o['roomPoolCode']); // o Something return o[k]; }); } search(data);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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