javascript - 从外部 json 数据创建 3D 谷歌图表到 html 文件
问题描述
我有一个包含以下内容的 json 文件 -
{"Passed":"1","Failed":"1","Other":"2","Inconclusive":"3"}
我想创建一个 html 文件,该文件将呈现一个饼图,其中带有通过(绿色)、失败(红色)、不确定(粉色或蓝色)和其他(橙色)的图例。当鼠标悬停在饼图上时,它应该显示 json 中给出的数字。
这是我创建的 3D 饼图的 html 代码 -
<html>
<head>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
google.charts.load("current", {packages:["corechart"]});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Execution State', 'Number of tests'],
['Inconclusive', 3],
['Failed', 1],
['Other', 2],
['Passed', 1],
]);
var options = {
title: 'Execution Result',
is3D: true,
};
var chart = new google.visualization.PieChart(document.getElementById('piechart_3d'));
chart.draw(data, options);
}
</script>
</head>
<body>
<div id="piechart_3d" style="width: 900px; height: 500px;"></div>
</body>
</html>
现在我需要将外部 json 文件作为数据提供给我的 html 文件,而不是将内联数据传递给 html。我怎样才能做到这一点?任何可以解决我的问题的指标都将不胜感激。谢谢你!
编辑:这是我正在使用的最新代码 -
<html>
<head>
<title>Test Result</title>
<link rel="icon" type="image/png" href="https://icons.iconarchive.com/icons/martz90/circle/256/plex-icon.png"/>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"/>
<script src="https://www.google.com/jsapi"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"/>
<script type="text/javascript">
google.charts.load("current", {
packages:["corechart"]
}).then(function () {
$.ajax({
url: "http://localhost/TestExecutionResult.json",
dataType: "json"
}).done(function (jsonData) {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Execution State');
data.addColumn('number', 'Number of tests');
$.each(jsonData, function (key, value) {
data.addRow([key, parseInt(value)]);
});
var options = {
title: 'Execution Result',
is3D: true,
};
var chart = new google.visualization.PieChart(document.getElementById('piechart_3d'));
chart.draw(data, options);
});
});
</script>
</head>
<body>
<table>
<tr>
<th> Test result: </th>
</tr>
<tr>
<td>
<div id="piechart_3d" style="width: 900px; height: 500px;"/>
</td>
</table>
</body>
</html>
以及我在本地主机上发布的 json (TestExecutionResult.json) -
{"TestCasesPassed":0,"TestCasesFailed":1,"TestCasesOther":0,"TestCasesInconclusive":0}
编辑2:
<html>
<head>
<title>Production Smoke Test Result</title>
<link rel="icon" type="image/png" href="https://icons.iconarchive.com/icons/martz90/circle/256/plex-icon.png"/>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<script type="text/javascript">
google.charts.load("current", {
packages:["corechart"]
}).then(function () {
$.ajax({
url: "http://localhost/TestExecutionResult.json",
dataType: "json"
}).done(function (jsonData) {
// send data to console
console.log(JSON.stringify(jsonData));
var data = new google.visualization.DataTable();
data.addColumn('string', 'Execution State');
data.addColumn('number', 'Number of tests');
$.each(jsonData, function (key, value) {
data.addRow([key, parseInt(value)]);
});
window.alert(jsonData);
var options = {
title: 'Execution Result',
is3D: true,
};
var chart = new google.visualization.PieChart(document.getElementById('piechart_3d'));
chart.draw(data, options);
}).fail(function (jqXHR, status, errorThrown) {
// add fail callback
console.log('error: ' + errorThrown);
});
});
</script>
</head>
<body>
<table>
<tr>
<th> Test result: </th>
</tr>
<tr>
<td>
<div id="piechart_3d" style="width: 900px; height: 500px;"/>
</td>
</table>
</body>
</html>
解决方案
可以使用jquery ajax获取json数据,
建google数据表,
绘制图表。
请参阅以下片段...
google.charts.load("current", {
packages:["corechart"]
}).then(function () {
$.ajax({
url: "path/data.json",
dataType: "json"
}).done(function (jsonData) {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Execution State');
data.addColumn('number', 'Number of tests');
$.each(jsonData, function (key, value) {
data.addRow([key, parseInt(value)]);
});
var options = {
title: 'Execution Result',
is3D: true,
};
var chart = new google.visualization.PieChart(document.getElementById('piechart_3d'));
chart.draw(data, options);
});
});
只要确保在您的页面上包含 jquery ...
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
编辑
尝试将数据发送到控制台以确保按预期接收数据。
并且,添加fail
回调以查看 ajax 调用是否收到错误...
请参阅以下片段...
google.charts.load("current", {
packages:["corechart"]
}).then(function () {
$.ajax({
url: "path/data.json",
dataType: "json"
}).done(function (jsonData) {
// send data to console
console.log(JSON.stringify(jsonData));
var data = new google.visualization.DataTable();
data.addColumn('string', 'Execution State');
data.addColumn('number', 'Number of tests');
$.each(jsonData, function (key, value) {
data.addRow([key, parseInt(value)]);
});
var options = {
title: 'Execution Result',
is3D: true,
};
var chart = new google.visualization.PieChart(document.getElementById('piechart_3d'));
chart.draw(data, options);
}).fail(function (jqXHR, status, errorThrown) {
// add fail callback
console.log('error: ' + errorThrown);
});
});
推荐阅读
- python - 如何将 Python 输出到 Bash 脚本并保留空格?
- excel - VBA代码仅移动新粘贴的数据行的列
- python - 如何使用分配的“id”变量获取类实例?
- networking - 从 pod 到 Kubernetes 集群外的服务时,源 IP(记录在服务端,集群外)?
- python-3.x - 如何查找和计算图中两个节点之间的 K 最短不相交对路径?
- linux - 查找字符串后跟空白行,然后使用 grep 查找字符串
- python - 如何为 tensorflow.keras.preprocessing.text_dataset_from_directory 使用多个输入
- mysql - Oracle 中的 MySQl TinyInt(1) 等效项
- python - 如何删除 PANDAS 中正则表达式搜索周围不需要的文本?
- java - 如何将用户数据添加到 Excel 文件?