如何在Javascript中将嵌套json转换为对象数组?
我有一个像这样的深嵌套对象:如何在Javascript中将嵌套json转换为对象数组?,javascript,arrays,object,tree,Javascript,Arrays,Object,Tree,我有一个像这样的深嵌套对象: { 'name_1': 'val', 'name_2': 'val', 'name_3': { 'name_4': { 'name_5': { 'name_6': 'val', 'name_7': 'val', 'name_8': { 'name_9': 'val' } } } } } 这里的key可以是任何东西,而不是nam
{
'name_1': 'val',
'name_2': 'val',
'name_3': {
'name_4': {
'name_5': {
'name_6': 'val',
'name_7': 'val',
'name_8': {
'name_9': 'val'
}
}
}
}
}
这里的key可以是任何东西,而不是name_1、name_2、name_3…等等(name key
作为名称_1,名称_2..仅用于快速理解)
我想把上面的json转换成下面提到的格式的对象数组
[
{ "id": "1", "name": 'name_1: val', "parent_id": "0"},
{ "id": "2", "name": 'name_2: val', "parent_id": "0"},
{ "id": "3", "name": 'name_3', "parent_id": "0"},
{ "id": "4", "name": 'name_4', "parent_id": "3"},
{ "id": "5", "name": 'name_5', "parent_id": "4"},
{ "id": "6", "name": 'name_6: val', "parent_id": "5"},
{ "id": "7", "name": 'name_7: val', "parent_id": "5"},
{ "id": "8", "name": 'name_8', "parent_id": "5"},
{ "id": "9", "name": 'name_9: val', "parent_id": "8"},
]
任何帮助都将是非常感激的 您可以采用迭代和递归的方法。(将
id
存储在对象中,以便为其保留相同的对象引用,这允许在所有嵌套递归调用中使用它。)
函数平面(对象,id={id:0},父对象id=0){
返回Object.entries(Object).reduce((r[k,v])=>{
变量名称=k+(类型v==='string'?':'+v:'');
r、 push({id:id.id++,name,parent_id});
if(v&&typeof v=='object')r.push(…flat(v,id,id.id));
返回r;
}, []);
}
变量数据={name_1:'val',name_2:'val',name_3:{name_4:{name_5:{name_6:'val',name_7:'val',name_8:{name_9:'val'}},
结果=平坦(数据);
控制台日志(结果)代码>
。作为控制台包装{max height:100%!important;top:0;}
您可以采用迭代和递归的方法。(将id
存储在对象中,以便为其保留相同的对象引用,这允许在所有嵌套递归调用中使用它。)
函数平面(对象,id={id:0},父对象id=0){
返回Object.entries(Object).reduce((r[k,v])=>{
变量名称=k+(类型v==='string'?':'+v:'');
r、 push({id:id.id++,name,parent_id});
if(v&&typeof v=='object')r.push(…flat(v,id,id.id));
返回r;
}, []);
}
变量数据={name_1:'val',name_2:'val',name_3:{name_4:{name_5:{name_6:'val',name_7:'val',name_8:{name_9:'val'}},
结果=平坦(数据);
控制台日志(结果)代码>
。作为控制台包装{max height:100%!important;top:0;}
请添加您的问题陈述。我需要一个逻辑来将json对象转换为问题中提到的对象数组。这是否回答了您的问题@GrafiCode,不,该对象没有像我在上面的问题中提到的那样进行深度嵌套。请添加您的问题陈述。我需要一个逻辑来将json对象转换为问题中提到的对象数组。这是否回答了您的问题@GrafiCode,不,正如我在上面的问题中提到的,对象不是深嵌套的,您的答案使用name_1,'1'作为id,但在我的例子中,key可以是任何字符串,而不是name_1,name_2从何处获得id
?我对上述答案添加了一个小的修复,现在它可以不依赖name_1 id,非常感谢您的回答。您的回答使用name_1,'1'作为id,但在我的情况下,key可以是任何字符串,而不是name_1,name_2您从哪里获得id
?我对上述答案添加了一个小的修正,现在它可以不依赖name_1 id,非常感谢您的回答