将平面JSON文件转换为分层json数据,如flare.json

在一场麻烦的战斗后,我几乎想到了如何将平面json文件转换为Hierarchical文件。 我没有自己编写这个函数。 我从下面的post中复制了它。

D3 JSON数据转换

但现在问题是,在post中写的函数只有2级层次结构。 但我正在寻找4级层次结构。 我试图覆盖我失败的function但是。

代码与我正在尝试。


    
          var data = [
         {“dep”:“First Top”,“name”:“First child”,“model”:“value1”,“size”:“320”},
         {“dep”:“First Top”,“name”:“First child”,“model”:“value2”,“size”:“320”},
         {“dep”:“First Top”,“name”:“First child”,“model”:“value3”,“size”:“320”},
         {“dep”:“First Top”,“name”:“First child”,“model”:“value4”,“size”:“320”},
         {“dep”:“First Top”,“name”:“SECOND CHILD”,“model”:“value1”,“size”:“320”},
         {“dep”:“First Top”,“name”:“SECOND CHILD”,“model”:“value2”,“size”:“320”},
         {“dep”:“First Top”,“name”:“SECOND CHILD”,“model”:“value3”,“size”:“320”},
         {“dep”:“First Top”,“name”:“SECOND CHILD”,“model”:“value4”,“size”:“320”},
         {“dep”:“Second Top”,“name”:“First Child”,“model”:“value1”,“size”:“320”},
         {“dep”:“Second Top”,“name”:“First Child”,“model”:“value2”,“size”:“320”},
         {“dep”:“Second Top”,“name”:“First Child”,“model”:“value3”,“size”:“320”},
         {“dep”:“Second Top”,“name”:“First Child”,“model”:“value4”,“size”:“320”},
         {“dep”:“Second Top”,“name”:“SECOND CHILD”,“model”:“value1”,“size”:“320”},
         {“dep”:“Second Top”,“name”:“SECOND CHILD”,“model”:“value2”,“size”:“320”},
         {“dep”:“Second Top”,“name”:“SECOND CHILD”,“model”:“value3”,“size”:“320”},
         {“dep”:“Second Top”,“name”:“SECOND CHILD”,“model”:“value4”,“size”:“320”},
         {“dep”:“Third Top”,“name”:“First Child”,“model”:“value2”,“size”:“320”},
         {“dep”:“Third Top”,“name”:“First Child”,“model”:“value3”,“size”:“320”},
         {“dep”:“Third Top”,“name”:“First Child”,“model”:“value4”,“size”:“320”},
         {“dep”:“Third Top”,“name”:“First Child”,“model”:“value5”,“size”:“320”},
         {“dep”:“Third Top”,“name”:“Second Child”,“model”:“value1”,“size”:“320”},
         {“dep”:“Third Top”,“name”:“Second Child”,“model”:“value2”,“size”:“320”},
         {“dep”:“Third Top”,“name”:“Second Child”,“model”:“value3”,“size”:“320”},
         {“dep”:“Third Top”,“name”:“Second Child”,“model”:“value4”,“size”:“320”}
       ]

     var newData = {“name”:“root”,“children”:{}}

     data.forEach(函数(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( '主体')。附加( '前')
                   .text(JSON.stringify(newData,null,''));
        

输出当前代码


     {
       “名字”:“根”,
       “孩子们”:[
         {
           “名字”:“第一名”,
           “孩子们”:[
             {
               “名字”:“第一个孩子”,
               “孩子们”:[
                 {
                   “name”:“value1”,
                   “尺寸”:“320”
                 }
               ]
             },
             {
               “dep”:“First Top”,
               “名字”:“第一个孩子”,
               “模特”:“价值2”,
               “尺寸”:“320”
             },
             {
               “dep”:“First Top”,
               “名字”:“第一个孩子”,
               “模特”:“价值3”,
               “尺寸”:“320”
             },
             {
               “dep”:“First Top”,
               “名字”:“第一个孩子”,
               “模特”:“价值4”,
               “尺寸”:“320”
             },
             {
               “dep”:“First Top”,
               “名字”:“第二个孩子”,
               “model”:“value1”,
               “尺寸”:“320”
             },
             {
               “dep”:“First Top”,
               “名字”:“第二个孩子”,
               “模特”:“价值2”,
               “尺寸”:“320”
             },
             {
               “dep”:“First Top”,
               “名字”:“第二个孩子”,
               “模特”:“价值3”,
               “尺寸”:“320”
             },
             {
               “dep”:“First Top”,
               “名字”:“第二个孩子”,
               “模特”:“价值4”,
               “尺寸”:“320”
             }
           ]
         },
         {
           “名字”:“第二名”,
           “孩子们”:[
             {
               “名字”:“第一个孩子”,
               “孩子们”:[
                 {
                   “name”:“value1”,
                   “尺寸”:“320”
                 }
               ]
             },
             {
               “dep”:“第二名”,
               “名字”:“第一个孩子”,
               “模特”:“价值2”,
               “尺寸”:“320”
             },
             {
               “dep”:“第二名”,
               “名字”:“第一个孩子”,
               “模特”:“价值3”,
               “尺寸”:“320”
             },
             {
               “dep”:“第二名”,
               “名字”:“第一个孩子”,
               “模特”:“价值4”,
               “尺寸”:“320”
             },
             {
               “dep”:“第二名”,
               “名字”:“第二个孩子”,
               “model”:“value1”,
               “尺寸”:“320”
             },
             {
               “dep”:“第二名”,
               “名字”:“第二个孩子”,
               “模特”:“价值2”,
               “尺寸”:“320”
             },
             {
               “dep”:“第二名”,
               “名字”:“第二个孩子”,
               “模特”:“价值3”,
               “尺寸”:“320”
             },
             {
               “dep”:“第二名”,
               “名字”:“第二个孩子”,
               “模特”:“价值4”,
               “尺寸”:“320”
             }
           ]
         },
         {
           “名字”:“第三名”,
           “孩子们”:[
             {
               “名字”:“第一个孩子”,
               “孩子们”:[
                 {
                   “name”:“value2”,
                   “尺寸”:“320”
                 }
               ]
             },
             {
               “dep”:“第三名”,
               “名字”:“第一个孩子”,
               “模特”:“价值3”,
               “尺寸”:“320”
             },
             {
               “dep”:“第三名”,
               “名字”:“第一个孩子”,
               “模特”:“价值4”,
               “尺寸”:“320”
             },
             {
               “dep”:“第三名”,
               “名字”:“第一个孩子”,
               “模特”:“价值5”,
               “尺寸”:“320”
             },
             {
               “dep”:“第三名”,
               “名字”:“第二个孩子”,
               “model”:“value1”,
               “尺寸”:“320”
             },
             {
               “dep”:“第三名”,
               “名字”:“第二个孩子”,
               “模特”:“价值2”,
               “尺寸”:“320”
             },
             {
               “dep”:“第三名”,
               “名字”:“第二个孩子”,
               “模特”:“价值3”,
               “尺寸”:“320”
             },
             {
               “dep”:“第三名”,
               “名字”:“第二个孩子”,
               “模特”:“价值4”,
               “尺寸”:“320”
             }
           ]
         }
       ]
     }

期望的输出格式:


     {
       “名字”:“根”,
       “孩子们”:[
         {
           “名字”:“第一名”,
           “孩子们”:[
             {
               “名字”:“第一个孩子”,
               “孩子们”:[
                 {
                   “name”:“value1”,
                   “尺寸”:“320”
                 },
                 {
                   “name”:“value2”,
                   “尺寸”:“320”
                 },
                 {
                   “名字”:“value3”,
                   “尺寸”:“320”
                 },
                 {
                   “名字”:“value4”,
                   “尺寸”:“320”
                 }
               ]
             },
             {
               “名字”:“第二个孩子”,
               “孩子们”:[
                 {
                   “name”:“value1”,
                   “尺寸”:“320”
                 },
                 {
                   “name”:“value2”,
                   “尺寸”:“320”
                 },
                 {
                   “名字”:“value3”,
                   “尺寸”:“320”
                 },
                 {
                   “名字”:“value4”,
                   “尺寸”:“320”
                 }
               ]
             },

           ]
         },
         {
           “名字”:“第二名”,
           “孩子们”:[
             {
               “名字”:“第一个孩子”,
               “孩子们”:[
                 {
                   “name”:“value1”,
                   “尺寸”:“320”
                 },
                 {
                   “name”:“value2”,
                   “尺寸”:“320”
                 },
                 {
                   “名字”:“value3”,
                   “尺寸”:“320”
                 },
                 {
                   “名字”:“value4”,
                   “尺寸”:“320”
                 }
               ]
             },
             {
               “名字”:“第二个孩子”,
               “孩子们”:[
                 {
                   “name”:“value1”,
                   “尺寸”:“320”
                 },
                 {
                   “name”:“value2”,
                   “尺寸”:“320”
                 },
                 {
                   “名字”:“value3”,
                   “尺寸”:“320”
                 },
                 {
                   “名字”:“value4”,
                   “尺寸”:“320”
                 }
               ]
             },
           ]
         },
         {
           “名字”:“第三名”,
           “孩子们”:[
             {
               “名字”:“第一个孩子”,
               “孩子们”:[
                 {
                   “name”:“value1”,
                   “尺寸”:“320”
                 },
                 {
                   “name”:“value2”,
                   “尺寸”:“320”
                 },
                 {
                   “名字”:“value3”,
                   “尺寸”:“320”
                 },
                 {
                   “名字”:“value4”,
                   “尺寸”:“320”
                 }
               ]
             },
             {
               “名字”:“第二个孩子”,
               “孩子们”:[
                 {
                   “name”:“value1”,
                   “尺寸”:“320”
                 },
                 {
                   “name”:“value2”,
                   “尺寸”:“320”
                 },
                 {
                   “名字”:“value3”,
                   “尺寸”:“320”
                 },
                 {
                   “名字”:“value4”,
                   “尺寸”:“320”
                 }
               ]
             },
           ]
         }
       ]
     }

我从一个星期开始,但我一个人无法理解。 有人请修改函数,以便在我更新时以分层格式获取数据。

提前致谢!!

更新为使用递归方法

这应该适用于n级而不仅仅是2级或3级。您只需指定哪些属性定义哪些级别。

 var data = [ { "dep": "First Top", "name": "First child", "model": "value1", "size": "320" }, { "dep": "First Top", "name": "First child", "model": "value2", "size": "320" }, { "dep": "First Top", "name": "SECOND CHILD", "model": "value1", "size": "320" }, { "dep": "Second Top", "name": "First Child", "model": "value1", "size": "320" } ]; var newData = { name :"root", children : [] }, levels = ["dep","name"]; // For each data row, loop through the expected levels traversing the output tree data.forEach(function(d){ // Keep this as a reference to the current level var depthCursor = newData.children; // Go down one level at a time levels.forEach(function( property, depth ){ // Look to see if a branch has already been created var index; depthCursor.forEach(function(child,i){ if ( d[property] == child.name ) index = i; }); // Add a branch if it isn't there if ( isNaN(index) ) { depthCursor.push({ name : d[property], children : []}); index = depthCursor.length - 1; } // Now reference the new child array as we go deeper into the tree depthCursor = depthCursor[index].children; // This is a leaf, so add the last element to the specified branch if ( depth === levels.length - 1 ) depthCursor.push({ name : d.model, size : d.size }); }); }); 
 var data = [ { "state": "UP", "district": "Agra", "block": "IradatNagar","school":"APS","name":"A" }, { "state": "UP", "district": "Agra", "block": "IradatNagar","school":"IPS","name":"B" }, { "state": "UP", "district": "Agra", "block": "IradatNagar","school":"APS","name":"C" }, { "state": "MP", "district": "Bhopal", "block": "chota_Bhopal","school":"DPS","name":"D" }, { "state": "UP", "district": "Mathura", "block": "Farah","school":"HPS","name":"E" }, { "state": "UP", "district": "Kanpur", "block": "Mania","school":"BPs","name":"F" }, { "state": "UP", "district": "Agra", "block": "Arjun Nagar","school":"GPS","name":"G" }, { "state": "MP", "district": "Gwalior", "block": "Surya Nagar","school":"DPS","name":"H" } ]; var newData = { name :"State", children : [] }, levels = ["state","district","block","school"]; data.forEach(function(d){ var depthCursor = newData.children; levels.forEach(function( property, depth ) { var index; depthCursor.forEach(function(child,i) { if ( d[property] == child.name ) index = i; }); if ( isNaN(index) ) { depthCursor.push({name : d[property], children : []}); index = depthCursor.length - 1; } depthCursor = depthCursor[index].children; if ( depth === levels.length - 1 ) { depthCursor.push({ name : d.name}); } }); }); console.log(newData);