如何知道Mike Bostock的d3.js示例中的数据结构

时间:2017-01-11 21:36:28

标签: javascript json d3.js

如何在Mike Bostock这样的例子中知道jsons的结构(在使用d3操纵之后):

http://bl.ocks.org/mbostock/3886208

我的目标是使用我自己的JSON对象虚拟数组实现它而不加载csv数据。但我无法弄清楚jsons应该是什么样子。

Mike Bostock的数据处理:

d3.csv("data.csv", function(d, i, columns) {
  for (i = 1, t = 0; i < columns.length; ++i) t += d[columns[i]] = +d[columns[i]];
  d.total = t;
  return d;
}, function(error, data) {
  if (error) throw error;

我已经尝试在本地保存csv并在node.js命令中运行上面的代码,但它没有用。有更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

在d3的文档中,它显示了如何将CSV解析为对象数组的示例。以下是CSV文件的示例:

Year,Make,Model,Length
1997,Ford,E350,2.34
2000,Mercury,Cougar,2.38

生成的JavaScript数组是:

[
  {"Year": "1997", "Make": "Ford", "Model": "E350", "Length": "2.34"},
  {"Year": "2000", "Make": "Mercury", "Model": "Cougar", "Length": "2.38"}
]

(来自https://github.com/d3/d3-dsv/blob/master/README.md#dsv_parse

这意味着在您的示例中,第一个数据元素将如下所示:

[
  {"State": "AL", "Under 5 Years": "310504","5 to 13 Years": "552339","14 to 17 Years": "259034","18 to 24 Years": "450818","25 to 44 Years": "1231572","45 to 64 Years": "1215966","65 Years and Over": "641667"}
]

或者更喜欢这种格式:

[
  {
    "State": "AL", 
    "Under 5 Years": "310504",
    "5 to 13 Years": "552339",
    "14 to 17 Years": "259034",
    "18 to 24 Years": "450818",
    "25 to 44 Years": "1231572",
    "45 to 64 Years": "1215966",
    "65 Years and Over": "641667"
  }
]

您最好的选择是将Bostock的CSV复制到JSON到CSV转换器(this one has worked for me,但还有很多其他版本),然后在您的本地代码中使用JSON。

如果您使用D3 CSV加载功能,由于交叉原始请求错误,您将很难从没有简单服务器的本地文件执行此操作。

另外,当你说你将它作为node.js命令运行时,我并不完全清楚你的意思 - 我想你可能想把你的javascript和json对象包含在&#39;中。 JS&#39;文件和链接到一个html文件,或者只是在html文件中内嵌你的javascript,如果它是一个简单的项目(就像你在链接的视觉中的Bostock那样)