谷歌可视化api json vs python中的arraytodatatable,数据类型噩梦

时间:2015-01-15 22:10:19

标签: javascript python json string datetime

首先,我使用python创建了简单的静态Google可视化页面

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>

正如它所看到的那样,它运行良好,并以时间戳的形式通过时间戳&#39; 01.15.2015 23:23:43&#39;,这看起来像是一个字符串给我。

现在我尝试进化并转移到Json,这让我感到头疼。

convert python sql list into dictionary发布的Brent Washburne中,我相应地创建了我的字典

结果示例:

[{'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的数据列不能是字符串

互联网上有一些小信息,除了一些源代码。 我试图改变&#34; string&#34;至于&#34; datetime&#34;,如https://developers.google.com/chart/interactive/docs/reference#DataTable所示,但随后我遇到了转换问题的砖墙。

为什么它不再像字符串日期(以任何形式),比如arraytodatatable? 或者我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:0)

另一个不眠之夜带我去了https://docs.python.org/2/library/sqlite3.html第11.13.5.4章。默认适配器和转换器

它使用&#34; detect_types&#34;在连接标题中。

connection = sqlite3.connect(dbname,detect_types=sqlite3.PARSE_DECLTYPES)

显然,您需要从格式化数据库获取巡回时间戳:

datetime.datetime(2015, 1, 16, 10, 43, 54, 193266)

而不是unicode字符串,如我原来的问题

中所述

感谢您的帮助!