将常规json转换为flare.json为d3.js?

时间:2013-05-09 13:38:29

标签: javascript regex json d3.js

我有一个像这样的json:

{
"a": {
    "x": {
        "y": {
            "a": {}, 
            "z": {}, 
            "b": {}
        }
    }, 
    "c": {}, 
    "b": {
        "c": {
            "d": {}
        }
    }, 
    "d": {}, 
     ...
    }
}

有没有快速的方法将其转换为flare.json格式?

像这样:

{
"name":"a",
"children":[
      {
      "name":"x",
      "children":
            {
              "name":"y",
              "children":[{"name":"a", "size":0},{"name":"z","size":0},{"name":"b","size":0}]

...
}

谢谢。

3 个答案:

答案 0 :(得分:6)

我为此提出了一系列正则表达式转换。

 #replace-this      #with-this

  ^\s*"             \{"name":"
  : \{\},           \},
  : \{\}            \}
  ": \{$            ","children":\[
  ^\s*\},           \]\},
  ^\s*\}            \]\}              


 #in that order

并删除第一行和最后一行(应该是额外的{]}

应用这些正则表达式转换,

这样:

{
"a": {
"x": {
    "y": {
        "a": {}, 
        "z": {}, 
        "b": {}
    }
}, 
"c": {}, 
"b": {
    "c": {
        "d": {}
    }
}, 
"d": {} 
}

}

将成为这个:

{
"name": "a",
"children": [{
    "name": "x",
    "children": [{
        "name": "y",
        "children": [{
            "name": "a"
        },
        {
            "name": "z"
        },
        {
            "name": "b"
        }]
    }]
},
{
    "name": "c"
},
{
    "name": "b",
    "children": [{
        "name": "c",
        "children": [{
            "name": "d"
        }]
    }]
},
{
    "name": "d"
}]
}

然后可以与某些d3js示例一起使用。

答案 1 :(得分:1)

您将不得不编写自己的JSON或函数来动态更改JSON。 Flare.json遵循一个遵循Mike Bostock的d3文件的模式。

我会给你一个提示。您编写的模式似乎是(在伪代码中)

array("name":"a", "children":array("name":"x","children":array(..... 

基本上,您需要创建一个多维数组才能获得所需的结果。不幸的是,我不知道你是如何得到你的数据的,所以我不能告诉你更多。如果使用php使用json_encode方法

echo json_encode($jsonArray)

或在javascript中使用json.stringify

var json = JSON.stringify($jsonArray)

为了让数组变成json。

答案 2 :(得分:-1)

您可以使用d3.nest(),但是此功能甚至无法满足您的需要。在将数据发送到应用程序之前,您可能需要相应地格式化数据。

如果你想创建一个自定义函数,那么你可以查看this答案并迭代你的对象的键,因为它甚至不是一个数组。