使用getJSON从多层JSON读入Google Chart

时间:2014-08-06 20:40:46

标签: javascript jquery json google-visualization getjson

快速破解(下面会详细介绍):这里是jsfiddle。中间的注释部分是需要工作的。我无法将json数据添加到表中。任何提示都表示赞赏。感谢。

我试图将一些基本数据添加到Google Charts中的表格中。我发现它很容易从JSON的一个级别读取,但是一旦你进入多个级别,我就无法弄清楚如何使它工作。基本上,我想在表中为每个日期/名称/用户分组添加一行。这是我到目前为止(中间的$ .getJSON部分是重要部分):

   <script type='text/javascript'>
      google.load('visualization', '1', { packages: ['table'] });
      google.setOnLoadCallback(drawTable);
      function drawTable() {
          var array = [['Date', 'Country', 'Users']];
          var sample = [new Date(2014, 6, 5), 'USA', 12];
          array.push(sample);



          $.getJSON('/JSON/Index', { get_param: 'value' }, function (data) {
              $.each(data.UsersByDateList, function (key, value) {
                  $.each(value.UsersByDate, function (key2, value2) {
                      var item = [new value2.Date, value.Name, value2.Users];
                      array.push(item);
                  });
              });
          });



          sample = [new Date(2014, 6, 19), 'USA', 12];
          array.push(sample);

          var data = google.visualization.arrayToDataTable(array);
          var table = new google.visualization.Table(document.getElementById('table_div'));
          table.draw(data, { showRowNumber: true });
      }
   </script>

JSON看起来像这样:

{
   "NumRecords": "5123",
   "UsersByDateList": [
      {
         "Name": "Steve",
         "UsersByDate": [
            {
               "Date": "Date(2014,5,1)",
               "Users": 54
            },
            {
               "Date": "Date(2014,5,2)",
               "Users":103
            }
         ]
      },
      {
         "Name": "Jerry",
         "UsersByDate": [
            {
               "Date": "Date(2014,5,1)",
               "Users": 63
            },
            {
               "Date": "Date(2014,5,2)",
               "Users": 24
            }
         ]
       }
    ]
    }

问题可能与我使用的日期格式有关。我试图摆脱新的&#39;关键字以及以不同格式(例如UTC)存储日期,但我已经读过当前格式&#34;日期(YYYY,MM,DD)&#34;是谷歌图表接受的。

1 个答案:

答案 0 :(得分:0)

嗯,你有几个错误。首先,你在json中缺少一个]。另外,请更改此部分:

          $.each(data.UsersByDateList, function (key, value) {
              $.each(value.UsersByDate, function (key2, value2) {
                  var item = [value2.Date, value.Name, value2.Users];
                  array.push(item);
              });
          });

仍然需要修复日期,但这应该消除图表绘制上的错误

更新:你在评论中所做的部分有效,你只需要包含jquery。尽管如此,您的日期格式存在很大问题,因为只有在json格式中设置dataTable中的图表时,才能使用它。此外,始终尽量避免使用eval。你可以查看我在这里做的修复:

http://jsfiddle.net/juvian/xhp3g7u9/1/