我在使用CanvasJS生成图表时遇到了问题。
基本上,我从API获取数据,可以看到并检查JSON数组,但是当我要为图形生成dataPoint时,出现2个错误: 数据字段中的数据无效,值字段中的NaN无效。
有人可以给我提示吗?
// Fetching the data
fetch('https://appbe-dev.clearvuesystems.co.uk/demandForecast/getLiveLineDataEverySecRestApi').then(response => {
return response.json();
}).then(data => {
// Work with JSON data here
var jsonData = data;
// Generating Data Points
var dataPoints = [];
for (var i = 0; i <= jsonData.length - 1; i++) {
dataPoints.push({ y: new Date(jsonData[i].source_ts), x: Number(jsonData[i].renewablesobligationconsumption) });
console.log(dataPoints);
}
var chart = new CanvasJS.Chart("chartContainer", {
data: [
{
dataPoints: dataPoints,
type: "line",
}
]
});
chart.render();
}).catch(err => {
throw new Error( 'Impossible to get data' );
});
此处代码为https://jsfiddle.net/azacrown/qkhb0dv3/
欢呼
答案 0 :(得分:2)
由于获得data
和y:null
,您没有正确地在x:NaN
上进行治疗。
data
中的内容是数组中的对象数组,即[[{}, {}, {}...]]
,因此您需要进行相应的迭代。
使用此代码:
data.forEach(function(array) {
array.forEach(function(arrayItem) {
dataPoints.push({
y: new Date(arrayItem.source_ts),
x: Number(arrayItem.renewablesobligationconsumption)
});
});
});
下面是完整的工作示例。现在您的dataPoints
已准备就绪,您可以在任何需要的地方使用它:
// Fetching the data
fetch('https://appbe-dev.clearvuesystems.co.uk/demandForecast/getLiveLineDataEverySecRestApi').then(response => {
return response.json();
}).then(data => {
// Generating Data Points
var dataPoints = [];
data.forEach(function(array) {
array.forEach(function(arrayItem) {
dataPoints.push({
y: new Date(arrayItem.source_ts),
x: Number(arrayItem.renewablesobligationconsumption)
});
});
});
console.log(dataPoints);
var chart = new CanvasJS.Chart("chartContainer", {
data: [{
dataPoints: dataPoints,
type: "line",
}]
});
chart.render();
}).catch(err => {
throw new Error('Impossible to get data');
});
<br/>
<!-- Just so that JSFiddle's Result label doesn't overlap the Chart -->
<div id="chartContainer" style="height: 300px; width: 100%;"></div>