title: Convert flat JSON file to hierarchical json data like flare.json [d3 example file]
body: <p>After a troublesome fight i almost figured how to convert a flat json file to a Hierarchical one. I didn't write the function by my own. I copied it from the below post.</p>
  
  <p><a href="https://stackoverflow.com/questions/15912966/d3-json-data-conversion">D3 JSON DATA CONVERSION</a></p>
  
  <p>But now the problem now is, the function which was written in the post has just 2 levels of hierarchy. But i'm looking for 4 levels hierarchy. I tried to override the function where i failed but.</p>
  
  <p><strong>Code with what i'm trying.</strong></p>
  
  <pre>
  
      
           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(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]; });
  
                // show what we've got
                d3.select('body').append('pre')
                    .text(JSON.stringify(newData, null, '  '));
          
  
  </pre>
  
  <p><strong>Output of the current code</strong></p>
  
  <pre>
  
      {
        "name": "root",
        "children": [
          {
            "name": "First Top",
            "children": [
              {
                "name": "First child",
                "children": [
                  {
                    "name": "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"
              }
            ]
          },
          {
            "name": "Second Top",
            "children": [
              {
                "name": "First Child",
                "children": [
                  {
                    "name": "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"
              }
            ]
          },
          {
            "name": "Third Top",
            "children": [
              {
                "name": "First Child",
                "children": [
                  {
                    "name": "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"
              }
            ]
          }
        ]
      }
  
  </pre>
  
  <p><strong>Desired Output Format:</strong></p>
  
  <pre>
  
      {
        "name": "root",
        "children": [
          {
            "name": "First Top",
            "children": [
              {
                "name": "First child",
                "children": [
                  {
                    "name": "value1",
                    "size": "320"
                  },
                  {
                    "name": "value2",
                    "size": "320"
                  },
                  {
                    "name": "value3",
                    "size": "320"
                  },
                  {
                    "name": "value4",
                    "size": "320"
                  }
                ]
              },
              {
                "name": "Second child",
                "children": [
                  {
                    "name": "value1",
                    "size": "320"
                  },
                  {
                    "name": "value2",
                    "size": "320"
                  },
                  {
                    "name": "value3",
                    "size": "320"
                  },
                  {
                    "name": "value4",
                    "size": "320"
                  }
                ]
              },
  
            ]
          },
          {
            "name": "Second Top",
            "children": [
              {
                "name": "First child",
                "children": [
                  {
                    "name": "value1",
                    "size": "320"
                  },
                  {
                    "name": "value2",
                    "size": "320"
                  },
                  {
                    "name": "value3",
                    "size": "320"
                  },
                  {
                    "name": "value4",
                    "size": "320"
                  }
                ]
              },
              {
                "name": "Second child",
                "children": [
                  {
                    "name": "value1",
                    "size": "320"
                  },
                  {
                    "name": "value2",
                    "size": "320"
                  },
                  {
                    "name": "value3",
                    "size": "320"
                  },
                  {
                    "name": "value4",
                    "size": "320"
                  }
                ]
              },
            ]
          },
          {
            "name": "Third Top",
            "children": [
              {
                "name": "First child",
                "children": [
                  {
                    "name": "value1",
                    "size": "320"
                  },
                  {
                    "name": "value2",
                    "size": "320"
                  },
                  {
                    "name": "value3",
                    "size": "320"
                  },
                  {
                    "name": "value4",
                    "size": "320"
                  }
                ]
              },
              {
                "name": "Second child",
                "children": [
                  {
                    "name": "value1",
                    "size": "320"
                  },
                  {
                    "name": "value2",
                    "size": "320"
                  },
                  {
                    "name": "value3",
                    "size": "320"
                  },
                  {
                    "name": "value4",
                    "size": "320"
                  }
                ]
              },
            ]
          }
        ]
      }
  
  </pre>
  
  <p>I'm cracking my head from a week but i alone couldn't figure it out. Someone please amend the function to get the data in the hierarchical format as i've updated.</p>
  
  <p>Thanks in advance!!</p>