javascript中JSON的扁平化
我试图将多级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 = {};
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])
,而不是覆盖原始值。否则代码看起来就可以了。我想这是一个未经测试的意大利面代码的一部分。我会检查控制台是否有错误。是的,我必须自己做,不能使用平板模块。谢谢你的建议。