簡體   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