Javascript 从JSON递归创建对象

Javascript 从JSON递归创建对象,javascript,jquery,arrays,json,recursion,Javascript,Jquery,Arrays,Json,Recursion,我需要从JSON文件创建一个对象。 输入Json文件如下所示 { "test":{ "Record":1, "RecordValues":{ "Address":"3330 Bay Rd.", "City":"Los Angeles", "SecondObject":{ "1":"eins", "2":"zwei" } }

我需要从JSON文件创建一个对象。 输入Json文件如下所示

{  
   "test":{
      "Record":1,
      "RecordValues":{  
         "Address":"3330 Bay Rd.",
         "City":"Los Angeles",
         "SecondObject":{  
            "1":"eins",
            "2":"zwei"
         }
      }
   }
}
到目前为止,我拥有的是这个函数

var test = [];
function recFunc(obj, parent_id = null) {

    for(var i in obj) {
        if(typeof obj[i] == "object" && obj[i] !== null) {
            test.push({title: i, children: []});
            recFunc(obj[i], (test.length-1));
        }else {
            if(parent_id != null) {
                test[parent_id].children.push({title: (i + " : " + obj[i])});
            }else {
                test.push({title: (i + " : " + obj[i])});
            }
        }
    }
    return test;
}
输出对象应如下所示

[  
   { "title":"Record : 1" },
   {  
      "title":"RecordValues",
      "children":[  
         { "title":"Address : 3330 Bay Rd." },
         { "title":"City : Los Angeles" },
         {  
            "title":"SecondObject",
            "children":[  
               { "title":"1 : eins" },
               { "title":"2 : zwei" }
            ]
         }
      ]
   }
]


这里有一种可能的方法,递归迭代
对象。条目

const输入={
“测试”:{
"纪录":一,,
“记录值”:{
“地址”:“海湾路3330号”,
“城市”:“洛杉矶”,
“第二个对象”:{
“1”:“eins”,
“2”:“zwei”
}
}
}
};
const makeNested=(currInput)=>{
返回Object.entries(currInput).map(([key,val])=>(
val的类型!=“对象”
?{title:`${key}:${val}}
: {
标题:关键,
子项:makeNested(val)
}
))
};
log(makeNested(input.test))如果嵌套值是对象,则可以使用并递归调用该函数:

对象(值)==value
检查
值是否为非
null
的对象)

const obj={test:{Record:1,RecordValues:{Address:“3330湾路”,City:“洛杉矶”,SecondObject:{1:“eins”,2:“zwei”}};
函数变换(obj){
返回Object.entries(obj.map)([key,value])=>{
if(对象(值)==值)
返回{title:key,children:transform(value)}
其他的
返回{title:`${key}${value}`}
})
}

console.log(transform(obj.test))
您可以通过递归使用
Object.entries
reduce

let obj={“test”:{“Record”:1,“RecordValues”:{“Address”:“3330 Bay路”,“City”:“Los Angeles”,“SecondObject”:{“1”:“eins”,“2”:“zwei”}}
让递归=(obj)=>
Object.entries(obj).reduce((op[key,value])=>{
让final=typeof value==='object'?{标题:键,子项:递归(值)}
:{title:`${key}:${value}`}
返回op.concat(最终版)
},[])

log(recursive(obj.test))
该目标对象看起来是一个非常糟糕的设计。你能解释一下你为什么需要它吗?@trincot目标对象是javascript插件FancyTree所需要的你到达这里的速度更快了+1,我正在使用reduce:p胡闹我肯定需要更多地练习递归:)我回家后会尝试的。非常感谢:)