Google Visualization API JSON vs ArrayToDataTable in Python
google visualization api json vs arraytodatatable in python, datatype nightmare
起初我用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,这让我头疼。
正如布伦特·沃什伯恩在将python sql列表转换为字典中发布的那样,我相应地创建了我的字典
结果示例:
[{'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()
我得到的结果与数组到数据表相似:
[{"v":"01.15.2015 23:59:42"}]}]
令人惊讶的是,javascript 不再喜欢字符串了,并且错误地击中了我:
轴 #0 的数据列不能是字符串类型
互联网上的信息很少,除了一些源代码。正如 https://developers.google.com/chart/interactive/docs/reference#DataTable 所建议的那样,我试图将"字符串"更改为"日期时间",但后来我遇到了转换问题的砖墙。
为什么它不再喜欢字符串日期(以任何形式),就像数组到数据表一样?或者我该如何解决问题?
另一个不眠之夜引导我 https://docs.python.org/2/library/sqlite3.html 第 11.13.5.4 章。默认适配器和转换器
它在连接标头中使用"detect_types"。
connection = sqlite3.connect(dbname,detect_types=sqlite3.PARSE_DECLTYPES)
显然,这就是您需要以格式从数据库中获取游览时间戳的内容:
datetime.datetime(2015, 1, 16, 10, 43, 54, 193266)
而不是我最初的问题中提到的 Unicode 字符串
感谢大家的帮助!
相关文章:
- Node.js's Buffer.writeFloatBE in Javascript
- Setting default onclick behavior for <img> tag in gene
- Lucene Search in Alfresco
- grep in JQuery to C#
- write HTML in JavaScript
- jQuery setTimeOut: in for-loop
- SetTimeout and clearTimeout in Javascript
- lightbox in html 5 and javascript
- HTMLInputElement in IE7
- Mongodb$in以与数组中相同的顺序获取结果
- element.dataset in Internet Explorer
- jQuery parent() in table
- Instagram oauth flow in angularjs
- In循环的In运算符前后
- 如何使用for in循环在javascript中显示对象中的对象
- Jquery change onchange in onload
- 重构 jQuery in JS 问题
- strongloop script.js run find in before delete方法:如何同步运行异步方法
- TicTacToe minimax AI in Javascript
- Google Visualization API JSON vs ArrayToDataTable in Python