2013-10-21 92 views
2

我正在通过以下教程学习d3.js,并尝试阅读示例(谢谢迈克)。D3.js使用嵌套数组从tsv移动到json

在这个例子中:http://bl.ocks.org/mbostock/3884955,我听不太懂如何从TSV移动到嵌套的JSON。我有JSON,如果数据没有嵌套(见底部),它工作。

d3.tsv("d3-multi-series-line-chart-data.tsv", function(error, data) { 
      color.domain(d3.keys(data[0]).filter(function(key) { 
       return key !== "date"; 
      } 
)); 
... 

到::我已经从修改了代码

d3.json("d3-multi-series-line-chart-data.json", function(error, data) { 
      color.domain(d3.keys(data[0]).filter(function(key) { 
       return key !== "date"; 
      } 
)); 
... 

[编辑] 我有直觉的下面的代码段内的修改需要在于:

var cities = color.domain().map(function(name) { 
    return { 
    name: name, 
    values: data.map(function(d) { 
     return {date: d.date, temperature: +d[name]}; 
    }) 
    }; 
}); 

但我没有看到如何访问修改后的json上每个城市的温度。 [/编辑]

我试图打电话给关键的温度,但无济于事。我已经看过这里和文档中的一些例子,但是我对于不理解我感到很蠢。所以如果有人能够很好地向我展示,那将非常感激。

目前的JSON结构如下:

[ 
    { 
     "date":"20111001", 
     "New York":"63.4", 
     "San Francisco":"62.7", 
     "Austin":"72.2" 
    }, 
    { 
     "date":"20111002", 
     "New York":"58.0", 
     "San Francisco":"59.9", 
     "Austin":"67.7" 
    }, 
    { 
     "date":"20111003", 
     "New York":"53.3", 
     "San Francisco":"59.1", 
     "Austin":"69.4" 
    }, 
    ... 
] 

我想是这样的:

[ 
    { 
     "date":"20111001", 
     "temperature":{ 
     "New York":"63.4", 
     "San Francisco":"62.7", 
     "Austin":"72.2" 
     } 
    }, 
    { 
     "date":"20111002", 
     "temperature":{ 
     "New York":"58.0", 
     "San Francisco":"59.9", 
     "Austin":"67.7" 
     } 
    }, 
    { 
     "date":"20111003", 
     "temperature":{ 
     "New York":"53.3", 
     "San Francisco":"59.1", 
     "Austin":"69.4" 
     } 
    }, 
    ... 
] 
+0

无论您使用开始与什么数据结构,你必须把它改造成一些类似于什么在本例中使用。另外,如果你想使用嵌套结构,那么有更合适的例子。 –

+0

@LarsKotthoff我正在寻找一个不太普遍的答案。 :/ – thoroc

+0

我在说的是,可能有更温柔的方式来学习D3 :) –

回答

1

首先,最容易做的事情是简单的嵌套结构转换这个例子可以使用的东西。代码看起来像这样。

var flat = []; 
json.forEach(function(d) { 
    d.temperature.forEach(function(e) { 
    e.date = d.date; 
    flat.push(e); 
    }); 
}); 

在一般情况下,我会建议让您的数字作为JSON中的数字,而不是字符串(即不带引号)。