当前位置: 首页 > 面试题库 >

如何转换为D3的JSON格式?

鄢禄
2023-03-14
问题内容

在遵循众多D3示例时,数据通常以flare.json中给出的格式进行格式化:

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

我有一个邻接列表,如下所示:

A1 A2
A2 A3
A2 A4

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


问题答案:

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

第一个问题是您打算显示图形还是树。对于图,数据结构是根据节点和链接定义的。对于树,布局的输入是根节点,该根节点可能具有一系列子节点,并且其叶节点具有关联的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


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

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

  • 我在MongoDB中使用Java驱动程序3.0,以便通过Web服务发送JSON。 当我想将文档对象(org.bson.文档)转换为JSON时,我使用,当我想将JSON转换为文档对象时,我使用。 但是,当我处理文档列表时(如JSON中所示:

  • 问题内容: 我有一个带有两列的Pandas –一列带有文件名,一列带有生成它的时间: 我正在尝试将其转换为以下格式的JSON文件: 使用命令时,将以以下格式获取记录: 我只是想知道是否存在以所需格式获取JSON文件的选项。任何帮助,将不胜感激。 问题答案: 您得到的输出是。因此,您可以根据需要简单地对其进行切片,并从中删除逗号。 要将输出写入文本文件,您可以执行以下操作:

  • 在我的班上我有日期字段: 我使用DataTimeFormat是因为我想要这样的日期格式(用于我的REST控制器): YYYY-MM-DD'T'HH:MM:SS.SSSZ,例如“2000-10-31 01:30:00.000-05:00”。 但它在JSON中转换为(JSON数组): 而不是像这样(JSON字符串): 我使用依赖项(因为转换为object,就像这个问题一样)。

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