javascript - 如何转换为 D3 的 JSON 格式?

虽然遵循大量 D3 示例,但数据通常以 flare.json 中给出的格式进行格式化。 :

{
 "name": "flare",
 "children": [
  {
   "name": "analytics",
   "children": [
    {
     "name": "cluster",
     "children": [
      {"name": "AgglomerativeCluster", "size": 3938},
      :

我有一个邻接列表如下:

A1 A2
A2 A3
A2 A4

我想转换成上述格式。目前,我正在服务器端执行此操作,但有没有办法使用 d3 的功能来实现这一点?我找到了一个 here ,但该方法似乎需要修改 d3 核心库,由于可维护性,我不赞成。有什么建议吗?

最佳答案

没有规定的格式,因为您通常可以通过各种访问器函数(例如 hierarchy.children )和 array.map 重新定义数据.但是您引用的格式可能是树最方便的表示,因为它适用于默认访问器。

第一个问题是您是否打算显示 graph或 tree .对于图,数据结构是根据 nodes 定义的。和 links .对于树,布局的输入是根节点,它可能有一个数组 child nodes ,并且其叶节点具有关联的 value .

如果你想显示一个图表,而你所拥有的只是一个边列表,那么你需要遍历边以生成一个节点数组和一个链接。假设您有一个名为“graph.csv”的文件:

source,target
A1,A2
A2,A3
A2,A4

您可以使用 d3.csv 加载此文件然后产生一个节点和链接数组:

d3.csv("graph.csv", function(links) {
  var nodesByName = {};

  // Create nodes for each unique source and target.
  links.forEach(function(link) {
    link.source = nodeByName(link.source);
    link.target = nodeByName(link.target);
  });

  // Extract the array of nodes from the map by name.
  var nodes = d3.values(nodeByName);

  function nodeByName(name) {
    return nodesByName[name] || (nodesByName[name] = {name: name});
  }
});

然后您可以将这些节点和链接传递给力布局以可视化图表:

  • http://bl.ocks.org/2949937

如果您想生成一个,那么您需要进行稍微不同形式的数据转换来为每个父节点累积子节点。

d3.csv("graph.csv", function(links) {
  var nodesByName = {};

  // Create nodes for each unique source and target.
  links.forEach(function(link) {
    var parent = link.source = nodeByName(link.source),
        child = link.target = nodeByName(link.target);
    if (parent.children) parent.children.push(child);
    else parent.children = [child];
  });

  // Extract the root node.
  var root = links[0].source;

  function nodeByName(name) {
    return nodesByName[name] || (nodesByName[name] = {name: name});
  }
});

像这样:

  • http://bl.ocks.org/2949981

https://stackoverflow.com/questions/11088303/

相关文章:

json - Play Framework - 向 JSON 对象添加字段

json - 使用 jq 从 JSON 输出中提取特定字段

c# - 使用 JSON.NET 序列化/反序列化对象字典

json - 简单、安全的 API 认证系统

java - 可以将 Jackson 配置为从所有字符串属性中修剪前导/尾随空格吗?

ruby-on-rails - 销毁记录时应该渲染什么?

json - 在 node package.json 中,使用额外参数从另一个脚本调用脚本,在这种情

json - 应该如何为 RESTful JSON 集合实现 HATEOAS 样式的链接?

jquery - 使用 jQuery grep() 过滤 JSON 数组

php - 使用 json_encode() 时删除数组索引引用