将JSON日期从Perl发送到谷歌图表API

时间:2012-02-21 14:19:02

标签: javascript json perl google-visualization

我有一个小型舞者应用程序,它提供一些HTML(包括调用google图表API的javascript)和其他URL查询数据库,并以您可以传递给google.visualization的形式返回编码JSON中的数据。数据表。 javascript在舞者应用程序中查询JSON数据,然后将其传递到google图表API - 简化版本为:

    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script type="text/javascript">

      google.load('visualization', '1.0', {'packages':['corechart']});
      google.setOnLoadCallback(initialize);

function initialize() {
    var res = $.ajax({
        url: "/data/2",
        dataType:"json",
        async: false,
        data: "{}",
        contentType: "application/json",
        error: function(jqXHR, textStatus, errorThrown) {
             alert('textStatus ' + textStatus);
             alert('errorThrown ' + errorThrown);
        }
    });
    jsonData = res.responseText;
    var data = new google.visualization.DataTable(jsonData);

    var chart = new google.visualization.BarChart(document.getElementById('chart_div'));
    chart.draw(data, {width: 400, height: 240});

}
    </script>

问题是Perl返回的一些数据包含日期/时间戳,所以应该将类型设置为“datetime”:

{"rows":[{"c":[{"v":"WHAT_CAN_I_PUT_HERE"},{"v":"2095"}]}],"cols":[{"type":"datetime","label":"DTU"},{"type":"number","label":"COUNT"}]}

在Javascript中,您可以创建一个日期,通过以下方式传递给Google Analytics API:

new Date(2012, 1, 08, 09, 32, 0)

如何从Perl发送以JSON编码的日期,以便谷歌图表API能够理解它?如果你不能为我提供其他选择吗?

3 个答案:

答案 0 :(得分:19)

JSON不支持将datetime作为数据类型。但根据Google的文档,您只需发送一个包含以下格式的字符串:

  

JSON不支持JavaScript Date值(例如,“new Date(2008,1,28,0,31,26)”; API实现可以。但是,API现在支持自定义的有效JSON表示形式以下列格式将日期作为字符串:日期(年,月,日[,小时,分钟,秒[,毫秒]]),其中一天之后的所有内容都是可选的,而月份则从零开始。

Google Chart Tools Datasource Protocol

答案 1 :(得分:10)

只是为了澄清: 您应该将单元格值写为类似于以下内容的字符串:日期(年,月)。 为你的例子:

{"rows":[{"c":[{"v":"Date(year, month)"},{"v":"2095"}]}],"cols":[{"type":"datetime","label":"DTU"},{"type":"number","label":"COUNT"}]}

希望有帮助,并为你纠正,因为我在php中使用它而不是perl

答案 2 :(得分:3)

我遇到了同样的问题,上面的解决方案无效。搜索了几个小时后,我发现了以下帖子,并且解决方案在那里工作了。

https://groups.google.com/forum/#!msg/google-visualization-api/SCDuNjuo7xo/ofAOTVbZg7YJ

不要在json字符串中包含“new”,因此它只是:“Date(2012,1,08,09,32,0)”

相关问题