如何让Google Charts识别JSON数据并正常绘制折线图?
Google Charts Line Chart Shows No Data (Only Empty Framework)
我来帮你搞定这个头疼的问题!从你的代码和数据流程来看,核心问题大概率出在数据格式匹配或者Google Charts对数据的解析逻辑上,我给你拆解几个可能的原因和对应的解决办法:
1. 先排查addRows的输入格式问题
Google Charts的data.addRows()虽然支持对象数组,但有时候会因为细微的解析问题导致数据无法被识别。最稳妥的方式是把你的对象数组转换成二维数组再传入,避免格式兼容问题:
// 把原有的对象数组转换成Google Charts更易识别的二维数组格式 var formattedData = ar.map(item => [item.Time, item.Value]); // 再添加到DataTable中 data.addRows(formattedData);
2. 字符串类型的时间可能拖了后腿
你现在把时间列定义成了string类型,虽然理论上可以显示,但Google Charts的折线图对连续时间轴的支持更稳定,字符串时间容易被当作离散类别,偶尔会出现数据点不渲染的情况。建议把时间字符串转换成datetime类型(哪怕是当天的时间,也可以拼接一个基准日期):
// 先定义一个当天的基准日期 const today = new Date(); // 转换数据格式 var formattedData = ar.map(item => { // 把时分秒拆分出来,设置到基准日期上 const [hours, minutes, seconds] = item.Time.split(':'); const timePoint = new Date(today); timePoint.setHours(hours, minutes, seconds); return [timePoint, item.Value]; }); // 注意这里要把列类型改成'datetime' data.addColumn('datetime', 'Time'); data.addColumn('number', 'Value'); data.addRows(formattedData);
这样处理后,横轴会变成连续的时间轴,数据点不仅能正常显示,还能支持时间缩放这类交互功能。
3. 确认Google Charts库加载是否正确
有时候库加载不完整或者执行顺序错了,也会出现只显示框架的情况。一定要按照官方规范加载:
<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 = new google.visualization.DataTable(); // ... 剩下的代码 } </script>
绝对不能跳过setOnLoadCallback直接执行绘制代码,否则库还没加载好就会出问题。
4. 验证数据是否真的被传入DataTable
可以在代码里加一行调试代码,确认数据确实被添加进去了:
data.addRows(formattedData); // 输出DataTable的JSON内容,检查是否有数据 console.log(data.toJSON());
如果控制台输出的JSON里没有你期望的时间和数值,那就要回头检查PHP转JSON的步骤是否正确了。
建议你先从第一点开始尝试,换成二维数组的方式,大部分情况下这个就能解决问题。如果还是不行,再试试把时间转换成datetime类型。
内容的提问来源于stack exchange,提问作者CBX Straight 6
相关产品推荐
相关产品推荐

