javascript – 从平面json生成(多级)flare.json数据格式 - 代码日志

javascript – 从平面json生成(多级)flare.json数据格式

我有一个平面的json文件结构,如:

[
 { "name" : "ABC", "parent":"DEF", "relation": "ghi", "depth": 1 },
 { "name" : "DEF", "parent":"null", "relation": "null", "depth": 0 },
 { "name" : "new_name", "parent":"ABC", "relation": "rel", "depth": 2 }
 ....
 ....
 ]

我想要的是一个嵌套文件结构,如:

[ 
 {
   "name": "DEF",
   "parent": "null",
   "relation": "null",
   "children": [
                 { "name": "ABC",
                   "parent": "DEF",
                   "relation": "ghi",
                   "children": [
                                 "name": "new_name",
                                 ...
                                 "children": []
                               ]
                 }
               ]
  }
 ]

对于应该走多远的级别来说,没有限制。目前的最大值是30。
节点可以拥有的子节点数量没有限制。例如。根节点具有剩余的所有子节点作为其子节点。

我到现在为止试过了什么?

>阅读关于d3.nest()以及它如何嵌套但不完美。
https://groups.google.com/forum/?fromgroups=#!topic/d3-js/L3UeeUnNHO8/discussion
>为此编写了一个python脚本,但是它被空值限制,并且由于数据没有界限(每天增加两倍),所以非常慢。
>我尝试了强制导向的布局,它的工作非常好,但我想添加另一个布局,使可视化变得容易。
>我可以和其他一些python脚本一起发布,但是似乎没有发现任何其他信息,比“名字”和“孩子”。
>我读到:http://blog.pixelingene.com/2011/07/building-a-tree-diagram-in-d3-js/
但是它们也具有正确的格式数据。我打算创建的是http://bl.ocks.org/mbostock/4339083

数据源是MS SQL Server数据库,我通过python获取和解析。请帮助!在过去的两个星期里,我一直被困在这里。

谢谢

这是一个实现,在Javascript:http://jsfiddle.net/9FqKS/

您首先创建一个基于名称的地图,便于查找。有几种不同的方法可以做到这一点 – 在这种情况下,我使用一个.reduce方法,它以空对象开始,并遍历数据数组,为每个节点添加一个条目:

// create a {name: node} map
var dataMap = data.reduce(function(map, node) {
    map[node.name] = node;
    return map;
}, {});

这相当于:

var dataMap = {};
data.forEach(function(node) {
    dataMap[node.name] = node;
});

(我有时认为reduce是更优雅的。)然后迭代地添加每个孩子到它的父母,或者如果没有找到父类,则添加到根数组:

// create the tree array
var tree = [];
data.forEach(function(node) {
    // find parent
    var parent = dataMap[node.parent];
    if (parent) {
        // create child array if it doesn't exist
        (parent.children || (parent.children = []))
            // add node to parent's child array
            .push(node);
    } else {
        // parent is null or missing
        tree.push(node);
    }
});

除非你的树是巨大的,我不认为这应该是太贵了,所以你应该能够在客户端这样做(如果你不能,你可能有太多的数据,以容易地显示在任何情况下) 。

http://stackoverflow.com/questions/17847131/generate-multilevel-flare-json-data-format-from-flat-json

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:javascript – 从平面json生成(多级)flare.json数据格式