如何从JSON文件中读取数据并将其传递给谷歌图表行(javascript)

时间:2017-11-21 15:28:02

标签: javascript html json google-visualization

具有以下函数JSONChart() 它从var“allText”读取json数据,并且应该能够解析数据并将其用作谷歌图表的行数据。

注释掉添加行部分会使用空图正确显示列数据。

需要一种方法来解析文件中的给定样本数据,并将其显示为谷歌图表中的行数据。

function JSONChart() {
google.charts.load('current', {'packages':['corechart']});
 var data = new google.visualization.DataTable();
   data.addColumn('string', 'Time stamp');
   data.addColumn('number', 'CPU');
   data.addColumn('number', 'MEMORY');
   data.addColumn({type:'string', role:'annotation'});
   data.addColumn({type:'string', role:'annotationText'});
   var data1  = JSON.parse(allText);
   var dataTableData = google.visualization.arrayToDataTable(data1);
   data.addRows (dataTableData);

var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
// Set chart options
   var options = {'title' : 'CPU & Memory',
      hAxis: {
         title: 'Time'
      },
      vAxis: {
         title: 'Percentage'
      },
      'width':1400,
      'height':600,
      curveType: 'function'
   };

chart.draw(data, options);
}

window.onload = function() {
  google.charts.setOnLoadCallback(JSONChart());
};

示例JSON传递给变量“allText”

{"2017/11/03 01:06:51":{"SCREEN":" ABC ","MEMORY":" 32.0142% ","CPU":" 9.1% "},"2017/11/03 02:22:20":{"SCREEN":" XYZ ","MEMORY":" 31.101% ","CPU":" 10.3% "}

1 个答案:

答案 0 :(得分:0)

一些事情......

1)arrayToDataTable需要一个简单的数组,而不是一个json对象 它还返回一个已经创建的整个数据表 - > data
相反,将每个json对象转换为数组,
然后使用addRows将数据添加到现有数据表中 - > data

类似......

for (var date in data1) {
  if (data1.hasOwnProperty(date)) {
    chartData.push([
      date,
      parseFloat(data1[date].MEMORY.replace('%', '').trim()),
      parseFloat(data1[date].CPU.replace('%', '').trim()),
      data1[date].SCREEN,
      ''  // not sure what value you want to use here
    ]);
  }
}
data.addRows(chartData);

2)google.charts.load - 在调用回调之前,此语句等待加载窗口/文档 不需要 - > window.onload = function() {...

google.charts.load实际上会返回一个承诺,
所以你可以做点什么...

google.charts.load('current', {
  packages: ['corechart']
}).then(function () {
  // draw chart code here...  

3)将回调函数传递给setOnLoadCallback时, 应该传递对函数的引用 - > JSONChart
功能的结果 - > JSONChart()(删除parens)

4)推荐类似以下工作片段的设置...

google.charts.load('current', {
  packages: ['corechart']
}).then(function () {
  var data = new google.visualization.DataTable();
  data.addColumn('string', 'Time stamp');
  data.addColumn('number', 'CPU');
  data.addColumn('number', 'MEMORY');
  data.addColumn({type:'string', role:'annotation'});
  data.addColumn({type:'string', role:'annotationText'});

  var chartData = [];
  var data1 = {"2017/11/03 01:06:51":{"SCREEN":" ABC ","MEMORY":" 32.0142% ","CPU":" 9.1% "},"2017/11/03 02:22:20":{"SCREEN":" XYZ ","MEMORY":" 31.101% ","CPU":" 10.3% "}};
  for (var date in data1) {
    if (data1.hasOwnProperty(date)) {
      chartData.push([
        date,
        parseFloat(data1[date].MEMORY.replace('%', '').trim()),
        parseFloat(data1[date].CPU.replace('%', '').trim()),
        data1[date].SCREEN,
        ''  // not sure what value you want to use here
      ]);
    }
  }
  data.addRows(chartData);

  var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
  var options = {'title' : 'CPU & Memory',
    hAxis: {
      title: 'Time'
    },
    vAxis: {
      title: 'Percentage'
    },
    height: 600,
    curveType: 'function'
  };

  chart.draw(data, options);
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>