2013-04-10 42 views
1

我正在做一個treemap in d3,這就需要數據作爲一系列嵌套對象的,像這樣:如何轉換字典(嵌套對象)進入D3可用陣列樹形圖

{ 
    name: "flare", 
    children: [ 
     { 
      name: "analytics", 
      children: [ 
       { 
        name: "cluster", 
        children: [ 
         { 
          name: "AgglomerativeCluster", 
          size: 3938 
         }, 
         { 
          name: "CommunityStructure", 
          size: 3812 
         } 
        ] 
       } 
      ] 
     } 
    ] 
} 

自然的方法來收集幕後這個數據是(在Python術語)字典,像這樣:

{ 
    "flare": { 
     "analytics": { 
       "cluster": [ 
        { 
         name: "AgglomerativeCluster", 
         size: 3938 
        }, 
//etc etc 

什麼是最自然的方式從後者到前者獲得,而無需手動編寫嵌套循環?

回答

0

編輯:我剛剛意識到我的答案是以錯誤的方式(從第一版到第二版)進行操作。但是,您可以使用其他方式的相同原則。

您可能還需要在d3.nest()看看,如下所述:D3 JSON data conversion


我將創建一個遞歸函數來實現這一目標。我不得不使用jQuery映射的兒童數組的每個元素及其更新版本:

function reduce(dataset){ 
    if('children' in dataset) { 
     var tmp = {} 
     tmp[dataset.name] = $.map(dataset.children, function(d){return reduce(d)}) 
     return tmp 
    } else { 
     return dataset 
    } 
} 

當應用到您的示例數據集其中給出,:

{ 
    "flare": [{ 
     "analytics": [{ 
      "cluster": [{ 
       "name": "AgglomerativeCluster", 
       "size": 3938 
      }, { 
       "name": "CommunityStructure", 
       "size": 3812 
      }] 
     }] 
    }] 
} 

的jsfiddle:http://jsfiddle.net/chrisJamesC/kKDm3/