解析所有嵌套值

时间:2019-08-21 09:27:22

标签: javascript parsing nested

嗨,我已经能够从文件中解析出我需要的大多数值,但是现在无法从下面的嵌套数组中的localizedSize中提取所有值:

enter image description here

function callback(error, response, body) {
  if (!error && response.statusCode == 200) {
    var info = JSON.parse(body);
    for (var i = 0; i < info.objects.length; i++) {
    var counter = info.objects[i];
    var kickURL = counter.publishedContent.properties.coverCard.properties.portraitURL;
    var kickTitle = counter.productInfo[0].productContent.fullTitle;
    var kickDescription = counter.productInfo[0].productContent.description;
    var kickPrice = counter.productInfo[0].merchPrice.fullPrice;
    var kickSizes = counter.productInfo[0].skus;

        for(var j = 0; j < kickSizes.length; j++)
    {
        var sizes = counter.productInfo[0].skus[j].countrySpecifications;
    }

  console.log(sizes);
}

上面的代码只是输出:

[ { country: 'GB',
    localizedSize: '6 (EU 40)',
    localizedSizePrefix: 'UK',
    taxInfo: { vat: 20 } } ]

寻找是否可以获取localizedSize中的所有值,而不仅仅是第一个值。

1 个答案:

答案 0 :(得分:0)

请参见代码中的“ 0”,它们只会获取数组中的第一项

var kickDescription = counter.productInfo[0].productContent.description;
var kickPrice = counter.productInfo[0].merchPrice.fullPrice;
var kickSizes = 
counter.productInfo[0].skus[0].countrySpecifications[0].localizedSize;

这就是您仅获得第一尺寸的原因。 您可以像前面在代码

中那样,使用lenght属性在for循环中循环数组的每个项目。
for (var i = 0; i < info.objects.length; i++) {
//.....
} 

否则,我建议您在通过大型JSON进行解析时对数组使用for-of循环,对对象使用for-in。

尝试下面的算法仅复制您的代码(它可能无法完全发挥作用,因为主要是我不知道用例,其次是提供的JSON是部分的)

function callback(error, response, body) {
if (!error && response.statusCode == 200) {
var info = JSON.parse(body);

for(let counter of info.objects) {
    var kickURL = counter.publishedContent.properties.coverCard.properties.portraitURL;
//console.log(kickURL);

    for(let prodInf of counter.productInfo){
        var kickTitle = prodInf.productContent.fullTitle;
        var kickDescription = prodInf.productContent.description;
        var kickPrice = prodInf.merchPrice.fullPrice;
    //console.log(kickURL,kickTitle);
        for(let sk of prodInf.skus){
            for(let conSpec of sk.countrySpecifications){
                var kickSizes = conSpec.localizedSize;
            //console.log(kickSizes);

            // if you want all the sizes in an array you can individually keep pushing each of the value to an empty array here or do whatever you like .
            }
        }
    }
}