javascript中JSON的扁平化

javascript中JSON的扁平化,javascript,Javascript,我试图将多级JSON对象展平为简单输出 key2:{ keyB1:{ keyC1:{ keyD1:'value b c 1' } }, keyB2:{ keyC2:'value b c 2' } } 我的输出在第一次迭代中很好,但是第二次,计数器没有设置。请运行代码以查看问题 function flattenInput(datainput) { const result = {};

我试图将多级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:“值b c 1”

key2.keyB2.keyC2:“值b c 2”

我得到的是: key2.keyB1.keyC1.keyD1:“值b c 1” (仅限)


您可以使用递归来更深入地遍历关键点,并使用一组关键点来跟踪访问的关键点

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

let obj={key2:{keyB1:{keyC1:{keyD1:'value bc1'}},keyB2:{keyC2:'value bc2'}};
下游功能(desiredObj、currentObj、键){
如果(当前对象的类型=='string'){
desiredObj[keys.join('.')]=currentObj;
}否则{
key(currentObj).forEach(key=>down(desiredObj,currentObj[key],…key,key]);
}
}
让结果={};
Object.keys(obj.forEach)(key=>down(result,obj[key],[key]);

控制台日志(结果)
json格式错误,我认为使用let i代替jsut应该这样做,否则它们使用的是同一个变量,可能会相互干扰,看起来这是重复的。看见您可以选择一种解决方案,并对其进行调整,以获得您喜欢的确切格式。您可以在callit1中的每次迭代中增加“键列表”。当前代码将为第二个键提供
key2.keyB1.keyB2.keyC2
。您需要一个不同的变量来存储实际项目的“keylist”,或者执行
callit1(keylist+“+i,datainput[i])
,而不是覆盖原始值。否则代码看起来就可以了。我想这是一个未经测试的意大利面代码的一部分。我会检查控制台是否有错误。是的,我必须自己做,不能使用平板模块。谢谢你的建议。