从json变量d3js(javascript)初始化数据

从json变量d3js(javascript)初始化数据,javascript,json,d3.js,Javascript,Json,D3.js,为了创建动态图形,我从REST服务器获取一个json变量。我找到了一种从这个变量初始化图形的方法,但在初始化之前,我必须对其中的每个数据应用一个函数 以下是我当前代码的一部分: d3.json("test.json", function(data) { var parse = d3.time.format("%Y-%m-%d %H").parse; types = d3.nest() .key(function(d) { return d.type; }) .e

为了创建动态图形,我从REST服务器获取一个json变量。我找到了一种从这个变量初始化图形的方法,但在初始化之前,我必须对其中的每个数据应用一个函数

以下是我当前代码的一部分:

d3.json("test.json", function(data) {
  var parse = d3.time.format("%Y-%m-%d %H").parse;

  types = d3.nest()
      .key(function(d) { return d.type; })
      .entries(stocks = data);

  types.forEach(function(s) {
    s.values.forEach(function(d) { d.jour = parse(d.jour); d.count = +d.count; });
    s.maxCount = d3.max(s.values, function(d) { return d.count; });
    s.sumCount = d3.sum(s.values, function(d) { return d.count; });
  });
  var g = svg.selectAll("g")
      .data(types)
    .enter().append("g")
      .attr("class", "type");

  setTimeout(lines, duration);
});
正如您所看到的,我的代码使用json文件,但它只是用于一些测试。我无法使用此方法,因为我的数据来自REST服务器。您是否有任何想法将json文件的使用替换为包含json的变量

下面是我的json中的内容示例:

[
{"type":"CAD","jour":"2016-03-29 00","count":28697},
{"type":"CAD","jour":"2016-03-29 01","count":29156},
{"type":"CAD","jour":"2016-03-29 02","count":29799},
{"type":"CAD","jour":"2016-03-29 03","count":30095},
{"type":"CAD","jour":"2016-03-29 04","count":28430},
{"type":"CAD","jour":"2016-03-29 05","count":29124},
{"type":"CAD","jour":"2016-03-29 06","count":28073},
{"type":"CAD","jour":"2016-03-29 07","count":29398},
{"type":"CAD","jour":"2016-03-29 08","count":28522},
{"type":"CAD","jour":"2016-03-29 09","count":15685},
{"type":"ISM","jour":"2016-03-29 00","count":39170},
{"type":"ISM","jour":"2016-03-29 01","count":39143},
{"type":"ISM","jour":"2016-03-29 02","count":39061},
{"type":"ISM","jour":"2016-03-29 03","count":39066},
{"type":"ISM","jour":"2016-03-29 04","count":38529},
{"type":"ISM","jour":"2016-03-29 05","count":39019},
{"type":"ISM","jour":"2016-03-29 06","count":38354},
{"type":"ISM","jour":"2016-03-29 07","count":38195},
{"type":"ISM","jour":"2016-03-29 08","count":37907},
{"type":"ISM","jour":"2016-03-29 09","count":20015}
]

提前感谢。

只要在收到数据时拨打服务器电话并初始化D3图形即可。只需将代码放入成功回调:

$.getJSON('/getGraphicData', function(data) {
  var parse = d3.time.format("%Y-%m-%d %H").parse;

  types = d3.nest()
    .key(function(d) {
      return d.type;
    })
    .entries(stocks = data);

  types.forEach(function(s) {
    s.values.forEach(function(d) {
      d.jour = parse(d.jour);
      d.count = +d.count;
    });
    s.maxCount = d3.max(s.values, function(d) {
      return d.count;
    });
    s.sumCount = d3.sum(s.values, function(d) {
      return d.count;
    });
  });
  var g = svg.selectAll("g")
    .data(types)
    .enter().append("g")
    .attr("class", "type");

  setTimeout(lines, duration);
});
编辑 正如@FlorianBury在评论中提到的,您也可以这样做:

d3.json('/getGraphicData', function(data) { ... });

您使用什么从服务器获取数据
XMLHttpRequest
或类似于
jQuery
的库?您只需要调用服务器来获取数据,在这个请求成功之后,您就可以初始化图形了。使用$.getJSON。。。。我会更新我的代码,然后给你一个反馈(不管它是否有效)。感谢不起作用。我也试图将我的url直接放在d3.json中获取数据的地方,但我得到了相同的结果。另一个解决方案可能是从javascript中的数据创建json文件,但在js中这肯定是不可能的(出于安全原因)@FlorianBury这与您使用
d3.json()的方法有何不同?如果这样做行得通,你的方法也行。@altocumulus我从未尝试过,因为在doc()中,你可以读取
d3.json
“在指定的url处创建一个mime类型为“application/json”的json文件请求。”。但看起来你是对的:@altocumulus我想当我直接将我的url放在我的d3.json中时,它会加载完整的文件,而不仅仅是json内容。通过D3API中的文档,我了解到函数d3.json只能从文件中读取数据,而不能从变量中读取数据,但可能我错了。我唯一确定的是,这种方法在我的情况下是有效的。@FlorianBury
d3.json()
$.getJSON()
基本上是等效的。他们将从同一个文件中加载相同的内容,但差异(如果有的话)是微妙的。但是,如果这有效,对你有好处!缺点是,您正在混合库。@FlorianBury完全出于好奇:请尝试一下,第一行更改为:
d3.json('/getGraphicData',function(error,data){