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.
D3 JSON DATA CONVERSION
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.
Code with what i'm trying.
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, ' '));
Output of the current code
{ "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" } ] } ] }
Desired Output Format:
{ "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" } ] }, ] } ] }
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.
Thanks in advance!!