在一场艰苦的斗争后,我几乎想出了如何将一个扁平的JSON文件转换为分层结构。但是我没有自己编写该函数,而是从下面的帖子中复制了它。
但是现在问题是,该帖子中编写的函数只有2级分层。但是我正在寻找4级分层。我尝试重写该函数,但失败了。
以下是我尝试的代码:
var data = [ {"dep": "第一层顶部", "name": "第一个子节点", "model": "值1", "size": "320"}, {"dep": "第一层顶部", "name": "第一个子节点", "model": "值2", "size": "320"}, {"dep": "第一层顶部", "name": "第一个子节点", "model": "值3", "size": "320"}, {"dep": "第一层顶部", "name": "第一个子节点", "model": "值4", "size": "320"}, {"dep": "第一层顶部", "name": "第二个子节点", "model": "值1", "size": "320"}, {"dep": "第一层顶部", "name": "第二个子节点", "model": "值2", "size": "320"}, {"dep": "第一层顶部", "name": "第二个子节点", "model": "值3", "size": "320"}, {"dep": "第一层顶部", "name": "第二个子节点", "model": "值4", "size": "320"}, {"dep": "第二层顶部", "name": "第一个子节点", "model": "值1", "size": "320"}, {"dep": "第二层顶部", "name": "第一个子节点", "model": "值2", "size": "320"}, {"dep": "第二层顶部", "name": "第一个子节点", "model": "值3", "size": "320"}, {"dep": "第二层顶部", "name": "第一个子节点", "model": "值4", "size": "320"}, {"dep": "第二层顶部", "name": "第二个子节点", "model": "值1", "size": "320"}, {"dep": "第二层顶部", "name": "第二个子节点", "model": "值2", "size": "320"}, {"dep": "第二层顶部", "name": "第二个子节点", "model": "值3", "size": "320"}, {"dep": "第二层顶部", "name": "第二个子节点", "model": "值4", "size": "320"}, {"dep": "第三层顶部", "name": "第一个子节点", "model": "值2", "size": "320"}, {"dep": "第三层顶部", "name": "第一个子节点", "model": "值3", "size": "320"}, {"dep": "第三层顶部", "name": "第一个子节点", "model": "值4", "size": "320"}, {"dep": "第三层顶部", "name": "第一个子节点", "model": "值5", "size": "320"}, {"dep": "第三层顶部", "name": "第二个子节点", "model": "值1", "size": "320"}, {"dep": "第三层顶部", "name": "第二个子节点", "model": "值2", "size": "320"}, {"dep": "第三层顶部", "name": "第二个子节点", "model": "值3", "size": "320"}, {"dep": "第三层顶部", "name": "第二个子节点", "model": "值4", "size": "320"} ];
var newData = {"name":"根", "children":{}};
data.forEach(function(d){ if(typeof newData.children[d.dep] !== 'undefined') { newData.children[d.dep].children.push(d); } else { newData.children[d.dep] = {"name": d.dep, "children": [{"name": d.name, "children": [{"name": d.model, "size": d.size}]}]}; } });
newData.children = Object.keys(newData.children).map(function (key) { return newData.children[key]; });
// 显示结果 d3.select('body').append('pre').text(JSON.stringify(newData, null, ' '));
当前代码的输出结果
{ "name": "根目录", "children": [ { "name": "第一个顶级目录", "children": [ { "name": "第一个子目录", "children": [ { "name": "value1", "size": "320" } ] }, { "dep": "第一个顶级目录", "name": "第一个子目录", "model": "value2", "size": "320" }, { "dep": "第一个顶级目录", "name": "第一个子目录", "model": "value3", "size": "320" }, { "dep": "第一个顶级目录", "name": "第一个子目录", "model": "value4", "size": "320" }, { "dep": "第一个顶级目录", "name": "第二个子目录", "model": "value1", "size": "320" }, { "dep": "第一个顶级目录", "name": "第二个子目录", "model": "value2", "size": "320" }, { "dep": "第一个顶级目录", "name": "第二个子目录", "model": "value3", "size": "320" }, { "dep": "第一个顶级目录", "name": "第二个子目录", "model": "value4", "size": "320" } ] }, { "name": "第二个顶级目录", "children": [ { "name": "第一个子目录", "children": [ { "name": "value1", "size": "320" } ] }, { "dep": "第二个顶级目录", "name": "第一个子目录", "model": "value2", "size": "320" }, { "dep": "第二个顶级目录", "name": "第一个子目录", "model": "value3", "size": "320" }, { "dep": "第二个顶级目录", "name": "第一个子目录", "model": "value4", "size": "320" }, { "dep": "第二个顶级目录", "name": "第二个子目录", "model": "value1", "size": "320" }, { "dep": "第二个顶级目录", "name": "第二个子目录", "model": "value2", "size": "320" }, { "dep": "第二个顶级目录", "name": "第二个子目录", "model": "value3", "size": "320" }, { "dep": "第二个顶级目录", "name": "第二个子目录", "model": "value4", "size": "320" } ] }, { "name": "第三个顶级目录", "children": [ { "name": "第一个子目录", "children": [ { "name": "value2", "size": "320" } ] }, { "dep": "第三个顶级目录", "name": "第一个子目录", "model": "value3", "size": "320" }, { "dep": "第三个顶级目录", "name": "第一个子目录", "model": "value4", "size": "320" }, { "dep": "第三个顶级目录", "name": "第一个子目录", "model": "value5", "size": "320" }, { "dep": "第三个顶级目录", "name": "第二个子目录", "model": "value1", "size": "320{ "name": "根", "children": [ { "name": "第一级", "children": [ { "name": "第一个子级", "children": [ { "name": "value1", "size": "320" }, { "name": "value2", "size": "320" }, { "name": "value3", "size": "320" }, { "name": "value4", "size": "320" } ] }, { "name": "第二个子级", "children": [ { "name": "value1", "size": "320" }, { "name": "value2", "size": "320" }, { "name": "value3", "size": "320" }, { "name": "value4", "size": "320" } ] } ] }, { "name": "第二级", "children": [ { "name": "第一个子级", "children": [ { "name": "value1", "size": "320" }, { "name": "value2", "size": "320" }, { "name": "value3", "size": "320" }, { "name": "value4", "size": "320" } ] }, { "name": "第二个子级", "children": [ { "name": "value1", "size": "320" }, { "name": "value2", "size": "320" }, { "name": "value3", "size": "320" }, { "name": "value4", "size": "320" } ] } ] }, { "name": "第三级", "children": [ { "name": "第一个子级", "children": [ { "name": "value1", "size": "320" }, { "name": "value2", "size": "320" }, { "name": "value3", "size": "320" }, { "name": "value4", "size": "320" } ] }, { "name": "第二个子级", "children": [ { "name": "value1", "size": "320" }, { "name": "value2", "size": "320" }, { "name": "value3", "size": "320" }, { "name": "value4", "size": "320" } ] } ] } ] }我已经绞尽脑汁一个星期了,但我自己无法解决它。请有人修改此函数,以便按照我已更新的分层格式获取数据。
先谢谢了!