gpt4 book ai didi

javascript - 使用 JSON 的谷歌图表

转载 作者:搜寻专家 更新时间:2023-10-31 21:27:10 25 4
gpt4 key购买 nike

我以前没有使用过 Google Charts,但我正在尝试使用位于房屋周围的传感器绘制一些温度图,但我一直收到异常。我相当确定这是因为 JSON 的格式不正确,但在它需要什么格式以及如何让我的脚本以该格式生成 JSON 方面苦苦挣扎。

从数据库生成 JSON 的 PHP 脚本

<?php
require_once ("config.php");

$array = array();
$res = mysqli_query($con, "SELECT * FROM sensors WHERE vera_variable='CurrentTemperature'");
while ($row = mysqli_fetch_array($res)) {
$sensor_id = $row['sensor_id'];
$sensor_name = $row['sensor_name'];

$res2 = mysqli_query($con, "SELECT * FROM logs WHERE sensor_id='$sensor_id'");
while ($row2 = mysqli_fetch_array($res2)) {
$time = strtotime($row2['log_time']);
$formattedTime = date("m-d-y g:i", $time);

$sensor_value = $row2['sensor_value'];

$array[$formattedTime][$sensor_name] = $sensor_value;
}
}

$json = json_encode($array, JSON_PRETTY_PRINT);
echo "<pre>" . $json . "</pre>";

?>

上述脚本的示例输出。可以看到有一个日期,多个传感器和它们对应的值

{
"12-12-15 8:35": {
"Living Room Temperature": "18.3",
"Outside Temperature": "-5",
"Mud Room Temperature": "16.0",
"Basement Temperature": "14.0"
},
"12-12-15 8:40": {
"Living Room Temperature": "18.3",
"Outside Temperature": "-5",
"Mud Room Temperature": "16.0",
"Basement Temperature": "13.0"
},
"12-12-15 8:45": {
"Living Room Temperature": "18.3",
"Outside Temperature": "-5",
"Mud Room Temperature": "16.0",
"Basement Temperature": "13.0"
},
"12-12-15 8:50": {
"Living Room Temperature": "18.3",
"Outside Temperature": "-5",
"Mud Room Temperature": "16.0",
"Basement Temperature": "13.0"
},
"12-12-15 8:55": {
"Living Room Temperature": "18.3",
"Outside Temperature": "-5",
"Mud Room Temperature": "16.0",
"Basement Temperature": "13.0"
},
"12-12-15 9:00": {
"Living Room Temperature": "17.8",
"Outside Temperature": "-5",
"Mud Room Temperature": "16.0",
"Basement Temperature": "13.0"
}
}

以下是我所拥有的(只是一个使用 json 的简单示例图表)

<html>
<head>
<!-- Load jQuery -->
<script language="javascript" type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>
<!-- Load Google JSAPI -->
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", {
packages : ["corechart"]
});
google.setOnLoadCallback(drawChart);

function drawChart() {
var jsonData = $.ajax({
url : "json_temp.php",
dataType : "json",
async : false
}).responseText;

var obj = window.JSON.stringify(jsonData);
var data = google.visualization.arrayToDataTable(obj);

var options = {
title : 'Graph'
};

var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data, options);
}

</script>
</head>
<body>
<div id="chart_div" style="width: 900px; height: 500px;"></div>
</body>
</html>

编辑:这是 Chrome 在尝试加载图表时显示的错误:

Uncaught Error: Not an arraylha @ format+en,default+en,ui+en,corechart+en.I.js:191bha @ format+en,default+en,ui+en,corechart+en.I.js:193drawChart @ temperature.php:22

最佳答案

出现此错误是因为输入的 JSON 数据格式(obj 变量)与 Google Chart 数据 JSON 格式不兼容

您可以将输入数据转换为支持的格式,如下所示:

var chartData = [];
chartData.push(['Time','Living Room Temperature','Outside Temperature','Mud Room Temperature','Basement Temperature']);
for (var key in obj) {
var item = obj[key];
chartData.push([new Date(key),parseFloat(item['Living Room Temperature']),parseFloat(item['Outside Temperature']),parseFloat(item['Mud Room Temperature']),parseFloat(item['Basement Temperature'])]);
}
var data = google.visualization.arrayToDataTable(chartData);

工作示例

Some changes have been made on how data is loaded, in particular since it's considered a bad practice to perform synchronous calls async is set to true. In addition, requests are handled via promises.

google.load("visualization", "1", {
packages: ["corechart"]
});
google.setOnLoadCallback(drawChart);

function drawChart() {
$.ajax({
url: "https://gist.githubusercontent.com/vgrem/e08a3da68a5db5e934a1/raw/2f971a9d1524d0457a6aae4df861dc5f0af0a2ef/data.json", //json_temp.php
dataType: "json"
})
.done(function (data) {

var chartData = [];
chartData.push(['Time','Living Room Temperature','Outside Temperature','Mud Room Temperature','Basement Temperature']);
for (var key in data) {
var item = data[key];
chartData.push([new Date(key),parseFloat(item['Living Room Temperature']),parseFloat(item['Outside Temperature']),parseFloat(item['Mud Room Temperature']),parseFloat(item['Basement Temperature'])]);
}

var dataTable = google.visualization.arrayToDataTable(chartData);
var options = {
title: 'Graph'
};
var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(dataTable, options);

});
}
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<div id="chart_div" style="width: 900px; height: 500px;"></div>

关于javascript - 使用 JSON 的谷歌图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34361792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com