Javascript 如何迭代对象/数组中的项,并构建嵌套的JSON?
我正在处理一些JSON数据,我需要从一个对象获取数据,并构建一个JSON对象 编辑:生成的JSON与D3.js图表库一起使用,因此出现了一个奇怪的问题(以及明显的反对票) 从API返回的数据如下所示:Javascript 如何迭代对象/数组中的项,并构建嵌套的JSON?,javascript,json,d3.js,underscore.js,Javascript,Json,D3.js,Underscore.js,我正在处理一些JSON数据,我需要从一个对象获取数据,并构建一个JSON对象 编辑:生成的JSON与D3.js图表库一起使用,因此出现了一个奇怪的问题(以及明显的反对票) 从API返回的数据如下所示: var data = [ [ {"id": 1, "key1":"value1", "key2":"value2", "key3":"value3"}, {"id": 2, "key1":"value1", "key2":"value2", "key3":"
var data = [
[
{"id": 1, "key1":"value1", "key2":"value2", "key3":"value3"},
{"id": 2, "key1":"value1", "key2":"value2", "key3":"value3"},
{"id": 3, "key1":"value1", "key2":"value2", "key3":"value3"},
{"id": 4, "key1":"value1", "key2":"value2", "key3":"value3"},
{"id": 5, "key1":"value1", "key2":"value2", "key3":"value3"},
{"id": 6, "key1":"value1", "key2":"value2", "key3":"value3"}
]
];
{
"name" : "1",
"children" : [
{
"name" : "2",
"children" : [
{
"name" : "3",
"children" : [
{
"name" : "4",
"children" : [
{
"name" : "5",
"children" : [
{
"name" : "6",
"children" : [ ]
}
]
}
]
}
]
}
]
}]
}
我需要我的JSON将每个对象嵌套在前面的代码中,如下所示:
var data = [
[
{"id": 1, "key1":"value1", "key2":"value2", "key3":"value3"},
{"id": 2, "key1":"value1", "key2":"value2", "key3":"value3"},
{"id": 3, "key1":"value1", "key2":"value2", "key3":"value3"},
{"id": 4, "key1":"value1", "key2":"value2", "key3":"value3"},
{"id": 5, "key1":"value1", "key2":"value2", "key3":"value3"},
{"id": 6, "key1":"value1", "key2":"value2", "key3":"value3"}
]
];
{
"name" : "1",
"children" : [
{
"name" : "2",
"children" : [
{
"name" : "3",
"children" : [
{
"name" : "4",
"children" : [
{
"name" : "5",
"children" : [
{
"name" : "6",
"children" : [ ]
}
]
}
]
}
]
}
]
}]
}
为了演示,我只在6点停下来——我需要一些可以处理N个对象的东西。
目前,我正在使用\遍历数据对象。每个,但不知道如何嵌套
任何帮助都会很好-谢谢
var数据=[{“id”:1,“key1”:“value1”,“key2”:“value2”,“key3”:“value3”},{“id”:2,“key1”:“value1”,“key2”,“key3”:“value3”},{“id”:1”,“key1”,“key2”:“value2”,“key3”},{“id”:4,“key1”:“value1”,“key2”:“value2”,“key3”},{“id”:5,“key1”:“value1”,“key2”:“value2”,“key3”:“value3”},{“id”:6,“key1”:“value1”,“key2”:“value2”,“key3”:“value3”}];
var r=(函数rec(d,o,i){
如果(i==-1)返回o;
var t={};
t、 name=d[i].id;
t、 儿童=[];
t、 儿童。推(o);
返回记录(d,t,--i);
})(数据[0],{},数据[0]。长度-1);
document.write(''+JSON.stringify(r,0,2)+'');
这就是我的想法。@isvforall速度快了一点,但我更喜欢我的。。)
var数据=[[{“id”:1,“key1”:“value1”,“key2”:“value2”,“key3”:“value3”},{“id”:2,“key1”:“value1”,“key2”,“key3”:“value3”},{“id”:1”,“key1”,“key2”:“value2”,“key3”:“value3”},{“id”:4,“key1”:“value1”,“key2”,“key3”:“value3”},{“id”:5,“key1”:“value1”,“key2”,“key2”:“value2”,“key3”:”value3“},{“id”:6,“key1”:“value1”,“key2”:“value2”,“key3”:“value3”}];
var result=(函数buildTree(输入,索引){
如果(索引>=input.length)
返回[];
返回[
{
名称:输入[index].id,
子级:构建树(输入,索引+1)
}
];
})(数据[0],0);
document.write(“”+JSON.stringify(结果,0,2)+“”);
我需要这样做,因为我正在构建一个D3树可视化,它使用这种类型的JSONI,如果你的树是递归的,那么你的方法也应该是递归的。我看到的问题是,对于你所问的问题,实际上没有一个过于通用的解决方案。数据可能有一些ID链接父级和子级,而不仅仅是数组[n+1]
是数组[n]的子级
。这使得递归构建对象成为一种不同于任意嵌套N层深度的函数。如果结构确实如此,我会在这里放一些东西。@cdbajorin是的,这就是源数据的外观,以及JSON需要的结构。有什么答案可以解决您的问题吗?欢迎提供反馈。