嵌套的JSON结构,用于构建并排的d3.js图表

时间:2015-06-23 00:01:35

标签: javascript json d3.js

我目前仍然坚持如何遍历JSON结构(我创建)以创建并排的圆环图。我想我已经创建了一个糟糕的结构,但我会很感激任何建议。

我在Mike Bostock的例子中工作:http://bl.ocks.org/mbostock/1305337使用.csv文件作为源数据。

在该示例中,他使用d3.nest()创建一个带有航班起源数组的嵌套数据结构。

  var airports = d3.nest()
      .key(function(d) { return d.origin; })
      .entries(flights);
然后,他能够将新数据结构绑定到新的div选择器:

 var svg = d3.select("body").selectAll("div")
  .data(airports)
.enter().append("div")

这允许他为每个航班起源创建圆环图。

我的JSON数据如下所示:

{"years": [
  {
    "year": 2015,
    "type": "bestSellers",
    "chartOne":  [
        {
          "label": "smarties",
          "value": 11
        },
        {
          "label": "nerds",
          "value": 13
        },
        {
          "label": "dots",
          "value": 16
        },
        {
          "label": "sour patch kids",
          "value": 61
        }
    ],
    "chartTwo": [
        {
          "label": "Pepsi",
          "value": 36
        },
        {
          "label": "sunkist",
          "value": 13
        },
        {
          "label": "coke",
          "value": 34
        }
    ]}

我是一名CS学生,对数据结构最佳实践和d3.js缺乏经验。我创建的结构看起来并不“平坦”,所以我不确定是否需要使用d3.nest()。但是,我不清楚如何遍历chartOne和chartTwo使用结构。

我可以访问图表中的数组: var chartOne = years [0] .chartOne; var cartTwo = years [0] .chartTwo;

但我希望能够有一个对象来访问chart1和chart2。我很想在我的JSON中创建另一个数组块,但不清楚是否有更简单的方法。

1 个答案:

答案 0 :(得分:1)

不,你不需要在这里使用.nest。构建所需数据结构的最简单方法是建议(d3总是希望数组迭代):

var nestedData = [ years[0].chartOne, years[0].chartTwo ];

之后,它就像清理数据的访问者功能一样简单,而Bostock的示例效果很好。

示例here

enter image description here