当前位置: 首页 > 知识库问答 >
问题:

如何转换成D3的JSON格式?

惠翰藻
2023-03-14
{
 "name": "flare",
 "children": [
  {
   "name": "analytics",
   "children": [
    {
     "name": "cluster",
     "children": [
      {"name": "AgglomerativeCluster", "size": 3938},
      :

我有一个邻接列表如下:

A1 A2
A2 A3
A2 A4

我想把它转换成上面的格式。目前,我正在服务器端做这件事,但是有没有一种方法可以使用D3的功能来实现这一点呢?我在这里找到了一个,但该方法似乎需要修改d3核心库,由于可维护性,我不赞成。有什么建议吗?

共有1个答案

羿经武
2023-03-14

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

第一个问题是您打算显示的是图还是树。对于图,数据结构是根据节点和链接定义的。对于树,布局的输入是根节点,根节点可能具有子节点数组,其叶节点具有关联的值。

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

source,target
A1,A2
A2,A3
A2,A4
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});
  }
});

然后可以将这些节点和链接传递到force布局以使图形可视化:

  • 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});
  }
});
    null
 类似资料:
  • 问题内容: 在遵循众多D3示例时,数据通常以flare.json中给出的格式进行格式化: 我有一个邻接列表,如下所示: 我想将其转换为以上格式。目前,我正在服务器端执行此操作,但是有没有办法使用d3的功能来实现此目的?我在这里找到了一个,但是这种方法似乎需要修改d3核心库,由于可维护性,我不赞成这样做。有什么建议? 问题答案: 有没有规定的格式,通常可以通过各种访问函数重新定义你的数据(如hier

  • 问题内容: 我收到的日期值是这样的JSON对象: 我想用Java代码将其解析为或作为。 我想知道什么是简单的方法。 问题答案: 我认为第一个数字()是自纪元以来的毫秒数,并且是时区。鉴于以下示例代码似乎是这种情况,它似乎可以满足您的要求。 以下代码使用Jackson解析JSON输入,如果您还没有选择的JSON解析库,我建议您这样做。它缺少错误检查等。 样例代码: 输出:

  • 如何将Python DateTime转换为JSON格式? 输入 输出

  • 问题内容: 我尝试使用json格式的文件作为输入。这是示例数据的片段。 可以在r中使用这种复杂的json格式制作一个csv,以便更平滑地处理数据吗? 例如,有以下基本类别:基本信息照片创建者位置类别网址 可以制作带有basic_information.id,creator.id等子类别类别的csv文件吗? 问题答案: 在研究您的答案时,我在评论中张贴了一些链接,但现在我非常确信这是解决问题的方法。

  • 我有以下json字符串,我需要使用java spring boot在csv中转换它们。格式如下。

  • 在我的一个脚本中得到了以下代码: 我想做的是获取的内容,当我在Firefox中将URL加载到我的脚本中时,我可以从中解析一个值。关于如何将内容从以结尾的URL中实际获取到Python脚本中的对象中,我已经搜索了很多,但还没有找到一个好的答案。