繁体   English   中英

在JavaScript中展平JSON

[英]Flattening JSON in javascript

我正在尝试将多级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 bc 1' } }, keyB2: { keyC2: 'value bc 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); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM