Api D3图表和外部json数据
我正在做一个D3折线图。如果我将JSON中的数据加载到变量()中,它就可以正常工作。但是,当我从web API中实时提取相同的数据并将这些行添加到代码中时: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(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的修订版。请不要空白你的问题,这可能对将来的其他人有帮助。如果下面的答案有帮助,请单击✓ 图标低于分数。请勿破坏您的帖子。如果您不再希望帖子与您的帐户关联,您可以。