繁体   English   中英

如何遍历具有嵌套对象的 json 对象以获取我需要的数据

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

我有一个json对象,我需要从其中的嵌套对象中获取两条数据。

这是json对象

 { "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" } ] }] } ] }

我试图获取两条数据并将其放入数据网格中的列中。 第一个值来自键versionRoomPoolList.roomPoolCodeversionRoomPoolList.versionRoomTypeList.versionRoomTypeAttributeList.attributeCode

我正在尝试使用for loops来做到这一点for loops这是我迄今为止所拥有的:

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

我被困在如何遍历嵌套对象上。

您应该像这样访问您的对象。

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

我们还可以遍历所有键,如果它是嵌套对象,则调用该函数。

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

暂无
暂无

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

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