google.visualization.DataTable(JSON.parse(datastring)) 不工作
google.visualization.DataTable(JSON.parse(datastring)) is not working
我正在使用 google 图表在屏幕上和点击按钮时显示一些数据。正在从 webapi 调用加载数据。
为了简化问题,我将数据硬编码在函数本身中。
问题是我打电话的时候
google.visualization.DataTable(JSON.parse(datastring))
消息:Table has no columns.
它正在返回空数据表。我也试过 arrayToDatable 但没有用。
我在使用 arrayToDataTable 时出错。在这里。
Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys
我已经为它创建了一个 plunker。
http://plnkr.co/edit/pctIqoCWi3LhqxlgdnqM?p=preview
任何人都可以看看并告诉我这有什么问题。
直接从 json 创建 google.visualization.DataTable
时,
json 必须采用特定格式
参见 --> Format of the Constructor's JavaScript Literal data Parameter
google.visualization.arrayToDataTable
接受值数组,而不是对象...
[["ReportName","ReportTime"],["ABC",48],["XYZ",50]]
如果您不想更改 webapi 调用、
的结果格式
您需要转换图表的数据
有关示例,请参见以下工作片段...
google.charts.load('current', {
callback: function () {
var datastring = '{"PerformanceData" : [{"ReportName":"ABC","ReportTime":"48"},{"ReportName":"XYZ","ReportTime":"50"}]}';
var jsonData = JSON.parse(datastring);
var chartData = [];
// load chart data
jsonData.PerformanceData.forEach(function (row, rowIndex) {
// column headings
var columns = Object.keys(row);
if (rowIndex === 0) {
chartData.push(columns);
}
// row values
var chartRow = [];
columns.forEach(function (column, colIndex) {
var chartCell = row[column];
if (colIndex > 0) {
chartCell = parseFloat(chartCell);
}
chartRow.push(chartCell);
});
chartData.push(chartRow);
});
var data = google.visualization.arrayToDataTable(chartData);
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
chart.draw(data, { width: 400, height: 240 });
},
packages:['corechart']
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>
编辑
建立数据table后,使用group()
method聚合数据
您可以使用提供的聚合函数之一,或提供您自己的
google.visualization.data.avg
google.visualization.data.count
google.visualization.data.max
google.visualization.data.min
google.visualization.data.sum
请参阅以下工作片段...
google.charts.load('current', {
callback: function () {
var datastring = '{"PerformanceData" : [{"ReportName":"ABC","ReportTime":"48"},{"ReportName":"XYZ","ReportTime":"50"},{"ReportName":"ABC","ReportTime":"48"},{"ReportName":"XYZ","ReportTime":"50"},{"ReportName":"ABC","ReportTime":"48"},{"ReportName":"XYZ","ReportTime":"50"},{"ReportName":"ABC","ReportTime":"48"},{"ReportName":"XYZ","ReportTime":"50"}]}';
var jsonData = JSON.parse(datastring);
var chartData = [];
// load chart data
jsonData.PerformanceData.forEach(function (row, rowIndex) {
// column headings
var columns = Object.keys(row);
if (rowIndex === 0) {
chartData.push(columns);
}
// row values
var chartRow = [];
columns.forEach(function (column, colIndex) {
var chartCell = row[column];
if (colIndex > 0) {
chartCell = parseFloat(chartCell);
}
chartRow.push(chartCell);
});
chartData.push(chartRow);
});
var data = google.visualization.arrayToDataTable(chartData);
// group data
var dataGroup = google.visualization.data.group(
data, // data table
[0], // group by column
[{ // aggregation column
column: 1,
type: 'number',
aggregation: google.visualization.data.sum
}]
);
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
// use group data to draw chart
chart.draw(dataGroup, {
pieSliceText: 'value',
width: 400,
height: 240
});
},
packages:['corechart']
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>
我正在使用 google 图表在屏幕上和点击按钮时显示一些数据。正在从 webapi 调用加载数据。
为了简化问题,我将数据硬编码在函数本身中。
问题是我打电话的时候
google.visualization.DataTable(JSON.parse(datastring))
消息:Table has no columns.
它正在返回空数据表。我也试过 arrayToDatable 但没有用。 我在使用 arrayToDataTable 时出错。在这里。
Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys
我已经为它创建了一个 plunker。
http://plnkr.co/edit/pctIqoCWi3LhqxlgdnqM?p=preview
任何人都可以看看并告诉我这有什么问题。
直接从 json 创建 google.visualization.DataTable
时,
json 必须采用特定格式
参见 --> Format of the Constructor's JavaScript Literal data Parameter
google.visualization.arrayToDataTable
接受值数组,而不是对象...
[["ReportName","ReportTime"],["ABC",48],["XYZ",50]]
如果您不想更改 webapi 调用、
的结果格式
您需要转换图表的数据
有关示例,请参见以下工作片段...
google.charts.load('current', {
callback: function () {
var datastring = '{"PerformanceData" : [{"ReportName":"ABC","ReportTime":"48"},{"ReportName":"XYZ","ReportTime":"50"}]}';
var jsonData = JSON.parse(datastring);
var chartData = [];
// load chart data
jsonData.PerformanceData.forEach(function (row, rowIndex) {
// column headings
var columns = Object.keys(row);
if (rowIndex === 0) {
chartData.push(columns);
}
// row values
var chartRow = [];
columns.forEach(function (column, colIndex) {
var chartCell = row[column];
if (colIndex > 0) {
chartCell = parseFloat(chartCell);
}
chartRow.push(chartCell);
});
chartData.push(chartRow);
});
var data = google.visualization.arrayToDataTable(chartData);
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
chart.draw(data, { width: 400, height: 240 });
},
packages:['corechart']
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>
编辑
建立数据table后,使用group()
method聚合数据
您可以使用提供的聚合函数之一,或提供您自己的
google.visualization.data.avg
google.visualization.data.count
google.visualization.data.max
google.visualization.data.min
google.visualization.data.sum
请参阅以下工作片段...
google.charts.load('current', {
callback: function () {
var datastring = '{"PerformanceData" : [{"ReportName":"ABC","ReportTime":"48"},{"ReportName":"XYZ","ReportTime":"50"},{"ReportName":"ABC","ReportTime":"48"},{"ReportName":"XYZ","ReportTime":"50"},{"ReportName":"ABC","ReportTime":"48"},{"ReportName":"XYZ","ReportTime":"50"},{"ReportName":"ABC","ReportTime":"48"},{"ReportName":"XYZ","ReportTime":"50"}]}';
var jsonData = JSON.parse(datastring);
var chartData = [];
// load chart data
jsonData.PerformanceData.forEach(function (row, rowIndex) {
// column headings
var columns = Object.keys(row);
if (rowIndex === 0) {
chartData.push(columns);
}
// row values
var chartRow = [];
columns.forEach(function (column, colIndex) {
var chartCell = row[column];
if (colIndex > 0) {
chartCell = parseFloat(chartCell);
}
chartRow.push(chartCell);
});
chartData.push(chartRow);
});
var data = google.visualization.arrayToDataTable(chartData);
// group data
var dataGroup = google.visualization.data.group(
data, // data table
[0], // group by column
[{ // aggregation column
column: 1,
type: 'number',
aggregation: google.visualization.data.sum
}]
);
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
// use group data to draw chart
chart.draw(dataGroup, {
pieSliceText: 'value',
width: 400,
height: 240
});
},
packages:['corechart']
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>