2

我有一个像这样的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}]

...
}

谢谢你。

4

3 回答 3

6

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

 #replace-this      #with-this

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


 #in that order

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

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

这个:

{
"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 示例一起使用。

于 2013-05-13T12:50:02.583 回答
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。

于 2013-05-09T18:09:12.877 回答
-1

您可以使用d3.nest(),但是此功能不会为您提供所需的大小,甚至 . 在将数据发送到应用程序之前,您可能需要相应地格式化数据。

如果要创建自定义函数,则可以查看答案并迭代对象的键,因为它甚至不是数组。

于 2013-05-09T16:37:15.683 回答