3

当前我正在使用javascript库Clusterfck来执行数据分组。该库生成以下列格式的数组:将Clusterfck数组转换为JavaScript InfoVis Toolkit json分层结构

[ 
    {"canonical":[20,120,102], 
    "size":1 
    }, 
    {"canonical":[250,255,253], 
    "left":{ 
     "canonical":[250,255,253], 
     "size":1 
    }, 
    "right":{ 
     "canonical":[255,255,240], 
     "size":1 
    }, 
    "size":2 
    }, 
    {"canonical":[100,54,300], 
    "size":1 
    } 
] 

但如何D3.js和Jit使用JSON结构JavaScript库用于数据可视化,如下所示:

{ 
    "canonical":"Pai", 
    "children":[ 
     {"canonical":[20,120,102], "size":1}, 
     { 
      "canonical":[250,255,253], 
      "children": [ 
       {"canonical":[250,255,253], "size":1}, 
       {"canonical":[255,255,240], "size":1}    
      ], 
      "size":2 
     }, 
     { 
      "canonical":[100,54,300], 
      "size":1 
     } 
    ] 
} 

我想这些结构转换,使用JavaScript或PHP。任何人都可以帮我吗?

回答

3

如果你只是想在这些结构之间进行转换,这很简单。见工作小提琴:http://jsfiddle.net/nrabinowitz/vuk94/

function convert(input, rootName) { 
    // top level 
    if (Array.isArray(input)) { 
     return { 
      "canonical": rootName, 
      "children": input.map(convert) 
     }; 
    } 
    // node 
    else { 
     ['left', 'right'].forEach(function(side) { 
      if (input[side]) { 
       input.children = input.children || []; 
       input.children.push(convert(input[side])); 
       delete input[side]; 
      } 
     }); 
     return input; 
    } 
} 

它使用一对夫妇的ECMAScript 1.5功能(Array.isArrayforEachmap),但如果你使用D3你可能瞄准反正支持该浏览器。

+0

谢谢!完善! – gilvandev 2013-03-08 23:20:47