Преобразовать массив Clusterfck в JavaScript. InfoVis Toolkit json иерархический
В настоящее время я использую библиотеку JavaScript Clusterfck для выполнения группировки данных. Эта библиотека генерирует массив в следующем формате:
[
{"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
}
]
Но библиотеки Javascript для визуализации данных, как D3.js и Jit, используя структуры JSON, как показано ниже:
{
"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. Кто-нибудь может мне помочь?
1 ответ
Решение
Если вы просто хотите конвертировать между этими структурами, это довольно просто. Смотрите рабочую скрипку: 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.isArray
, forEach
, а также map
), но если вы используете d3, вы, вероятно, нацелены на браузеры, которые поддерживают это в любом случае.