10 votes

envoyer des dates JSON à l'API google charts depuis Perl

J'ai une petite application dansante qui sert quelques HTML (y compris le javascript pour appeler l'API google charts) et pour d'autres URLs interroge une base de données et renvoie les données en JSON encodé dans un formulaire que vous pouvez passer à google.visualization.DataTable. Le javascript interroge l'application Dancer pour obtenir les données JSON puis les transmet à l'API google charts - Une version simplifiée est la suivante :

    <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>

Le problème est que certaines des données renvoyées par Perl contiennent des dates/horodatages et que le type doit donc être défini sur "datetime" :

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

En Javascript, vous pouvez créer une date à transmettre à l'API de google charts :

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

Comment puis-je envoyer une date encodée en JSON depuis Perl de sorte que l'API google charts la comprenne ? Si ce n'est pas le cas, quelles autres options s'offrent à moi ?

21voto

benjaoming Points 677

JSON ne prend pas en charge les dates comme types de données. Mais selon la documentation de Google, vous pouvez simplement envoyer une chaîne avec ce format :

JSON ne prend pas en charge les valeurs de date JavaScript (par exemple, "new Date(2008,1,28,0,31,26)" ; l'implémentation de l'API le fait. Toutefois, l'API prend désormais en charge une représentation JSON personnalisée et valide des dates sous la forme d'une chaîne au format suivant : Date(année, mois, jour[, heure, minute, seconde[, milliseconde]]) où tout ce qui suit le jour est facultatif et les mois sont basés sur zéro.

Protocole de source de données de Google Chart Tools

10voto

justaguy Points 132

Juste pour clarifier : vous devez écrire la valeur de la cellule comme une chaîne de caractères qui ressemble à ça : Date(année, mois). pour votre exemple :

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

J'espère que cela vous aidera, et que c'est correct pour vous car je l'utilise en php et non en perl.

3voto

Sohail Points 472

Je rencontrais le même problème et la solution ci-dessus n'a pas fonctionné. Après avoir cherché pendant des heures, j'ai trouvé le message suivant et la solution proposée a fonctionné.

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

N'incluez pas "new" dans la chaîne json pour que ce soit juste : "Date(2012, 1, 08, 09, 32, 0)"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X