我的JSON对象数据:
{
"title": "aa",
"desc": ["i", "j", "k"],
"cnt": {
"head": "bb",
"main": {
"num1": {
"time1": "mm",
"time2": "kk"
},
"num2": "dd"
}
}
}
我的问题是:如何使用JavaScript将上述JSON对象转换为以下内容?
{
"title": "aa",
"desc": ["i", "j", "k"],
"cnt_head": "bb",
"cnt_main_num1_time1": "mm",
"cnt_main_num1_time2": "kk",
"cnt_main_num2": "dd"
}
我尝试使用for(i in obj) {....}
但失败了!
请帮忙!
您基本上是在询问如何使用代表嵌套路径的键来展平嵌套对象。这是一个小的递归函数,它可以做到这一点:
const flatten = (o, pre) => Object.entries(o).reduce((a, [k, v]) => (
key = pre ? `${pre}_${k}`: k,
{
...a,
...Object.getPrototypeOf(v) !== Object.prototype ? {[key]: v} : flatten(v, key)
}), {});
完整片段:
const o = {
"title": "aa",
"desc": ["i", "j", "k"],
"cnt": {
"head": "bb",
"main": {
"num1": {
"time1": "mm",
"time2": "kk"
},
"num2": "dd"
}
}
};
const flatten = (o, pre) => Object.entries(o).reduce((a, [k, v]) => (
key = pre ? `${pre}_${k}`: k,
{
...a,
...Object.getPrototypeOf(v) !== Object.prototype ? {[key]: v} : flatten(v, key)
}), {});
console.log(flatten(o));