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')))