循环遍历 JSON 数据以将嵌套数据添加到数组(将添加到 MySQL 数据库 table)因缺少值而失败

Looping through JSON data to add nested data to array (to be added to MySQL database table) fails at missing value

我有这个 4 层 if 循环,它循环遍历文件中的 JSON 对象。这里的目的是创建一个数组,该数组将被添加到 MySQL 数据库的一行中。

循环应过滤 json,然后将某些值添加到数组:

var content = fs.readFileSync("dataSubcats.json");
var jsonContent = JSON.parse(content);

var values = [];

for(let i=0; i<jsonContent.length; i++) {

    if (jsonContent[i].subcategories) {
        let subcat = jsonContent[i].subcategories.length;
        for (let n=0; n<subcat; n++) {

            if(jsonContent[i].subcategories[n]) {
                let subsubcat = jsonContent[i].subcategories[n].facetValueData.length
                for (let p=0; p<subsubcat; p++) {

                    if(jsonContent[i].subcategories[n].facetValueData) {
                        let products = jsonContent[i].subcategories[n].facetValueData[p].productData.length
                        for (let f=0; f<products; f++) {
                            
                            var productDataFinal = jsonContent[i].subcategories[n].facetValueData[p].productData[f]
                            values.push([   
                                jsonContent[i].id, jsonContent[i].categoryName, 
                                jsonContent[i].subcategories[n].name, jsonContent[i].subcategories[n].code, 
                                jsonContent[i].subcategories[n].facetValueData[p].name, jsonContent[i].subcategories[n].facetValueData[p].code,
                                productDataFinal.productDisplayName, productDataFinal.code, 
                                productDataFinal.url, productDataFinal.imageUrl,
                                productDataFinal.price.value, productDataFinal.originPrice.value, 
                                productDataFinal.price.currencyIso, productDataFinal.inStock,
                                productDataFinal.newProduct
                            ])
                        }
                    }
                }
            } else {
                 console.log(`No facetvalue data found at ${jsonContent[i]}`)
        }
        } 
    } else {
        console.log(`No subcats found at ${jsonContent[i]}`)
    }
}

JSON结构如下:

 [
    {
        "id": 0,
        "categoryName": "Beauty",
        "subcategories": [
            {
                "count": 2688,
                "code": "/beauty/skin-care",
                "name": "Skincare",
                "facetValueData": [
                    {
                        "count": 682,
                        "code": "/beauty/skin-care/lotion-serum-and-essence",
                        "name": "Lotion Serum & Essence",
                        "productData": []
                    },
                    {
                        "count": 497,
                        "code": "/beauty/skin-care/moisturiser-and-mist",
                        "name": "Moisturiser & Mist",
                        "productData": []
                    },
                    {
                        "count": 354,
                        "code": "/beauty/skin-care/cleanser-and-exfoliation",
                        "name": "Cleanser & Exfoliation",
                        "productData": []
                    },
                    {
                        "count": 345,
                        "code": "/beauty/skin-care/mask-and-treatment",
                        "name": "Mask & Treatment",
                        "productData": []
                    }
                ]
            },
            {
                "count": 1549,
                "code": "/beauty/makeup",
                "name": "Makeup",
                "facetValueData": [
                    {
                        "count": 653,
                        "code": "/beauty/makeup/face",
                        "name": "Face",
                        "productData": []
                    },
                    {
                        "count": 460,
                        "code": "/beauty/makeup/makeup-lips",
                        "name": "Lips",
                        "productData": []
                    },
                    {
                        "count": 337,
                        "code": "/beauty/makeup/eyes",
                        "name": "Eyes",
                        "productData": []
                    },
                    {
                        "count": 124,
                        "code": "/beauty/makeup/makeup-cheeks",
                        "name": "Cheeks",
                        "productData": []
                    }
                ]
            }
        ]
    },
    {
        "id": 1,
        "categoryName": "Electronics",
        "subcategories": [
            {
                "count": 526,
                "code": "/electronics/audio-devices",
                "name": "Audio",
                "facetValueData": [
                    {
                        "count": 153,
                        "code": "/electronics/audio-devices/speakers",
                        "name": "Speakers",
                        "productData": []
                    },
                    {
                        "count": 145,
                        "code": "/electronics/audio-devices/earphones",
                        "name": "Earphones",
                        "productData": []
                    },
                    {
                        "count": 142,
                        "code": "/electronics/audio-devices/headphones",
                        "name": "Headphones",
                        "productData": []
                    },
                    {
                        "count": 51,
                        "code": "/electronics/audio-devices/true-wireless-and-airpods",
                        "name": "True Wireless & Airpods",
                        "productData": []
                    }
                ]
            }
                    
        ]
    }
]

总共有 10 个 categoryName 对象(我可能在这里弄错了一些右括号,但在我的脚本中是正确的)。

循环总是因以下错误而中断:

let subsubcat = jsonContent[i].subcategories[n].facetValueData.length
                                                                               ^

TypeError: Cannot read property 'length' of undefined
    at Object.<anonymous> (/Users/Desktop/NodeScraper/db.js:18:80)
    at Module._compile (internal/modules/cjs/loader.js:1137:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
    at Module.load (internal/modules/cjs/loader.js:985:32)
    at Function.Module._load (internal/modules/cjs/loader.js:878:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
    at internal/main/run_main_module.js:17:47

我难住了

再见,你的错误可能在这里:

for (let n=0; n<subcat; i++) {...}

尝试将 i 替换为 n,例如:

for (let n=0; n<subcat; n++) {...}