在JavaScript中展平JSON

阿努·乔斯(Anu Jos)

我试图将多级JSON对象展平为简单输出。

key2:{  
   keyB1:{  
      keyC1:{  
         keyD1:'value b c 1'
      }
   },
   keyB2:{  
      keyC2:'value b c 2'
   }
}

我的输出在第一次迭代中很好,但是第二次没有设置计数器。请运行代码以查看问题。

function flattenInput(datainput) {
    const result = {};

    const callit1 = function(keylist, datainput) {
        for (i in datainput) {
            keylist = keylist + '.' + i;
            if (typeof datainput[i] === 'object') {
                return callit1(keylist, datainput[i]);
            } else {
                return keylist;
            }
        }
    }

    let klist = '';
    for (i in datainput) {
        if (typeof datainput[i] === 'object') {
            klist = callit1(i, datainput[i]);
            console.log(klist);
        }
    }
    console.log(result);
}

flattenInput(input);

预期:

key2.keyB1.keyC1.keyD1:'值bc 1'

key2.keyB2.keyC2:“值bc 2”

我得到的是:

key2.keyB1.keyC1.keyD1:'值bc 1'(仅)

您可以使用递归以更深入地浏览键,并使用键数组来保持对已访问键的跟踪。

这是假设最深的对象是字符串。

let obj = {   key2: {     keyB1: {       keyC1: {         keyD1: 'value b c 1'       }     },     keyB2: {       keyC2: 'value b c 2'     }   } };

function downstream(desiredObj, currentObj, keys) {
  if (typeof currentObj === 'string') {
    desiredObj[keys.join('.')] = currentObj;
  } else {
    Object.keys(currentObj).forEach(key => downstream(desiredObj, currentObj[key], [...keys, key]));
  }
}

let result = {};
Object.keys(obj).forEach(key => downstream(result, obj[key], [key]));

console.log(result);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章