【发布时间】:2015-01-15 22:10:18
【问题描述】:
起初我用python创建了简单的静态谷歌可视化页面
python 中的源代码:
def print_graph_script(temp_table):
# google chart snippet
chart_code="""
<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 data = google.visualization.arrayToDataTable([
['Time', 'Temperature', 'Low', 'High'],
%s
]);
var options = {
title: 'Temperature stats',
};
var chart = new google.visualization.LineChart(document.getElementById('temp_chart_div'));
chart.draw(data, options);
}
</script>"""
print chart_code % (temp_table)
并生成html:
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Time', 'Temperature', 'Low', 'High'],
['01.15.2015 22:23:53', 22.937, 20.0, 22.0],
['01.15.2015 23:23:43', 21.687, 20.0, 22.0]
]);
var options = {
title: 'Temperature stats',
};
var chart = new google.visualization.LineChart(document.getElementById('temp_chart_div'));
chart.draw(data, options);
}
</script>
正如它所看到的,它工作正常并以“01.15.2015 23:23:43”格式传递时间戳,这对我来说就像一个字符串。
现在我尝试进化并迁移到 Json,这让我很头疼。
正如 Brent Washburne 在 convert python sql list into dictionary 中发布的那样,我相应地创建了我的字典
结果示例:
[{'timestamp': u'01.15.2015 23:54:12', 'temp': 21.375}]
现在,当我将它传递给 gviz_api 以将其转换为 json 时:
schema = {"timestamp": ("string", "timestamp"),"temp": ("number", "temp")}
data = temp_chart_table
# Loading it into gviz_api.DataTable
data_table = gviz_api.DataTable(schema)
data_table.LoadData(data)
json = data_table.ToJSon()
我得到与 arraytodatatable 类似的结果:
[{"v":"01.15.2015 23:59:42"}]}]
令人惊讶的是,javascript 不再喜欢字符串,并给我带来了错误:
轴 #0 的数据列不能是字符串类型
互联网上的信息很少,除了一些源代码。 正如https://developers.google.com/chart/interactive/docs/reference#DataTable 建议的那样,我尝试将“字符串”更改为“日期时间”,但后来我遇到了转换问题。
为什么它不再喜欢字符串日期(以任何形式),比如 arraytodatatable? 或者我该如何解决这个问题?
【问题讨论】:
-
这里有 3 种不同的字符串格式来表示日期:
'2015.01.15 23:54:12'、'01.15.2015 22:23:53'和"15.01.2015 23:59:42"——据我所知,它们都不是标准化的时间格式。为什么不使用标准化的 iso 格式并完成它? -
我使用
curs.execute("INSERT INTO data values (null, CURRENT_TIMESTAMP, (?), (?), (?), (?), (?), (?), (?), (?))", (temp,pinstatus,low_limit,high_limit,lightstatus,balstatus,vvstatus,svstatus))将时间戳插入数据库,据我了解,这应该是“最佳实践”。strftime让我将其转换为我的区域格式并添加缺少的 GMT 那是我的错误,因为您提到的这些格式被搞砸了,复制粘贴错误。所有这些都应该是“d.m.Y H:M:S”,但谷歌 API 会吃掉所有这些,无论它们是什么顺序。只有当我将它们作为数组传递时。
标签: javascript python json string datetime