2015-06-23 88 views
0

我目前被困在如何遍历JSON结构(我创建)以创建并排的环形图表。我想我已经创建了一个糟糕的结构,但会很感激任何建议。嵌套的JSON结构并排构建d3.js图表​​

我正在从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

不,您不需要在这里使用.nest。建立必要的数据结构最简单的方法是按照你的建议(d3总是想一个数组遍历):

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

之后,它作为清理存取功能为您的数据和博斯托克的例子作品一样简单好。

示例here

enter image description here

+0

谢谢回答问题和示例代码。现在我明白了这一点对我来说完全有意义。 – AmericanCities