JSFiddle - React, Tailwind, and code Playground
by ramnathv
JavaScript
var data = {
"A": {
"b": {x: 1, isleaf: true},
"c": 1,
"d": {"e": 2, "f": 6}
},
"B": {
"d": 1
}
}
var data2 = {"analytics":{"cluster":{"AgglomerativeCluster":{"size":3938,"isleaf":true},"CommunityStructure":{"size":3812,"isleaf":true},"MergeEdge":{"size":743}},"graph":{"BetweennessCentrality":{"size":3534,"isleaf":true},"LinkDistance":{"size":5731,"isleaf":true}}}}
function make_tree(x, root){
function isObject(item) {
return (typeof item === "object" && !Array.isArray(item) && item !== null);
}
// modified version of d3.entries
function make_children(n){
return Object.keys(n).map(function(e){
return {name: e, children: n[e]}
})
}
function to_tree(x){
x.forEach(function(x_){
if (isObject(x_.children) && !x_.children.isleaf){
x_.children = to_tree(make_children(x_.children))
} else {
//x_.value = x_.children
Object.keys(x_.children)
.forEach(function(k){
if (k != 'isleaf'){
x_[k] = x_.children[k]
}
})
delete(x_.children)
}
return x
})
return x
}
return {
name: root,
children: to_tree(make_children(x))
}
}
console.log(JSON.stringify(make_tree(data2, 'root')))