문제

Currently I am using the javascript library Clusterfck to perform a data grouping. This library generates an array in the following format:

[
  {"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
  }
]

But javascript libraries for data visualization how D3.js and Jit using JSON structures as shown below:

{
    "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
        }
    ]
}

I would like to convert these structures, using JavaScript or PHP. Could anyone help me?

도움이 되었습니까?

해결책

If you just want to convert between these structures, this is pretty simple. See working fiddle: 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;
    }
}

This uses a couple of ECMAScript 1.5 features (Array.isArray, forEach, and map), but if you're using d3 you're probably targeting browsers that support this anyway.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top