Api D3图表和外部json数据

Api D3图表和外部json数据,api,d3.js,real-time,linechart,Api,D3.js,Real Time,Linechart,我正在做一个D3折线图。如果我将JSON中的数据加载到变量()中,它就可以正常工作。但是,当我从web API中实时提取相同的数据并将这些行添加到代码中时: d3.json(url, function(error, data) { if (error) { console.log(error); } else { makeChart(data); } data.forEach(function(d) { d.tim

我正在做一个D3折线图。如果我将JSON中的数据加载到变量()中,它就可以正常工作。但是,当我从web API中实时提取相同的数据并将这些行添加到代码中时:

d3.json(url, function(error, data) {
    if (error) {
        console.log(error);
    } else {
        makeChart(data);
    }

    data.forEach(function(d) {
        d.timestamp = parseDate(d.timestamp);
        d.size = +d.size;
    });
    data.sort(function(a, b) {
        return a.timestamp - b.timestamp;
    });

    makeChart(data);
  }
);
我收到一条错误消息“uncaughttypeerror:data.forEach不是函数”()。我的两个轴得到渲染,但直线没有。 我的数据格式如下:

{
query: {
  usercontribs: [
    {
      size: 761,
      timestamp: "2017-07-17T21:00:25Z"
    },
    {
      size: 540,
      timestamp: "2016-11-29T02:06:28Z"
    }
   ]
  }
};
请任何人看一看,解释一下我如何解决这个问题?我已经为此挣扎了好几天,希望能得到一些帮助。谢谢大家!

很多问题:

1) 您应该为响应设置数据
data=data.query.usercontribs

2) 将时间戳转换为日期对象

  data.forEach(function(d) {
    d.timestamp = new Date(parseDate(d.timestamp));
    d.size = +d.size;
  });
3) 这是完全错误的

if (error) {
        console.log(error);
    } else {
        makeChart(data);
    }
    //you have already called makechart in the else! 
    data.forEach(function(d) {
        d.timestamp = parseDate(d.timestamp);
        d.size = +d.size;
    });
    data.sort(function(a, b) {
        return a.timestamp - b.timestamp;
    });

    makeChart(data);
应该是:

d3.json(
  "URL",
  function(error, data) {
    if (error) {
      console.log(error);
    } else {
      data = data.query.usercontribs;
      data.forEach(function(d) {
        d.timestamp = new Date(parseDate(d.timestamp));
        d.size = +d.size;
      });
      data.sort(function(a, b) {
        return a.timestamp - b.timestamp;
      });

      makeChart(data);
    }
  }
);

工作代码

其原因
https://en.wikipedia.org/w/api.php
不允许交叉原点。因此,您可以在gist和access中托管json,这是因为
数据
实际上是一个对象。如果你想循环浏览嵌入其中的数组,你必须执行
data.query.usercontribs.forEach(…)
。请不要破坏你的帖子,人们已经花了时间来回答。我已经回到@PetterFriberg的修订版。请不要空白你的问题,这可能对将来的其他人有帮助。如果下面的答案有帮助,请单击✓ 图标低于分数。请勿破坏您的帖子。如果您不再希望帖子与您的帐户关联,您可以。