Javascript 将外部JSON加载到ChartJs中

Javascript 将外部JSON加载到ChartJs中,javascript,jquery,json,angularjs,chart.js,Javascript,Jquery,Json,Angularjs,Chart.js,我是一个新手,在JavaScript中使用库绘制图表/我刚开始尝试Chartjs,我无法使用getJson或其他任何东西来加载json对象并替换标签和数据。我以前使用过HighCharts,与此相比,它非常简单。另外,我将如何将其放入Angular中的指令并显示它 index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title&

我是一个新手,在JavaScript中使用库绘制图表/我刚开始尝试Chartjs,我无法使用getJson或其他任何东西来加载json对象并替换标签和数据。我以前使用过HighCharts,与此相比,它非常简单。另外,我将如何将其放入Angular中的指令并显示它

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div style="width: 100%; height: 100%;">
    <canvas id="myChart" style="width: 100%; height: auto;"></canvas>
</div>
<div id="js-legend" class="chart-legend"></div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.0.1/Chart.min.js"></script>
<script src="js/chartJsControl.js"></script>
</body>
</html>
chartJsControl.js

var test = [];
$.getJSON("data.json", function (json) {
    test.push(json[i].timestamp);

});
var data = {
    labels: test,
    datasets: [
        {
            label: "My First dataset",
            fillColor: "rgba(220,220,220,0.5)",
            strokeColor: "rgba(220,220,220,0.8)",
            highlightFill: "rgba(220,220,220,0.75)",
            highlightStroke: "rgba(220,220,220,1)",
            data: [65, 59, 80, 81, 56, 55, 40]
        },
        {
            label: "My Second dataset",
            fillColor: "rgba(151,187,205,0.5)",
            strokeColor: "rgba(151,187,205,0.8)",
            highlightFill: "rgba(151,187,205,0.75)",
            highlightStroke: "rgba(151,187,205,1)",
            data: [28, 48, 40, 19, 86, 27, 90]
        }
    ]
};


var ctx = document.getElementById("myChart").getContext("2d");
ctx.canvas.width = 1000;
ctx.canvas.height = 800;

var myChart = new Chart(ctx).Bar(data);

如果要使用data.JSON返回的JSON,需要在回调函数中执行以下操作:

$.getJSON("data.json", function (json) {
  // will generate array with ['Monday', 'Tuesday', 'Wednesday']
  var labels = json.map(function(item) {
    return item.timestamp;
  });

  var data = {
    labels: labels,
    datasets: [
    {
      label: "My First dataset",
      fillColor: "rgba(220,220,220,0.5)",
      strokeColor: "rgba(220,220,220,0.8)",
      highlightFill: "rgba(220,220,220,0.75)",
      highlightStroke: "rgba(220,220,220,1)",
      data: [65, 59, 80, 81, 56, 55, 40]
    },
    {
      label: "My Second dataset",
      fillColor: "rgba(151,187,205,0.5)",
      strokeColor: "rgba(151,187,205,0.8)",
      highlightFill: "rgba(151,187,205,0.75)",
      highlightStroke: "rgba(151,187,205,1)",
      data: [28, 48, 40, 19, 86, 27, 90]
    }
    ]
  };

  var ctx = document.getElementById("myChart").getContext("2d");
  ctx.canvas.width = 1000;
  ctx.canvas.height = 800;

  var myChart = new Chart(ctx).Bar(data);
});
如果您将其用于Angular,我建议您使用Angular chart.js版本,请参阅:


那么你已经有了一个角度指令,你可以使用它

图表的创建必须在getJSON回调函数内。只有这样,您才能使用返回的jsonplease示例show@user2402107你可以想到
chart.js的angular版本看看这个答案,不久前,我写了一篇博客文章,比较了不同的angular图表库:实际上这里有一个更难的问题。它现在工作得很好,但我想每天分解每个json对象,这样周一它就是一个分组图,但现在它只是给了我相同的数据集,我不明白?也许你只需要迭代你的
json
并填充
数据集
数组。就像我希望每天的每个json都是画布上自己的分组条形图一样。不过现在是将两个数据集分组在一起。我不知道如何使用Chart.js进行分组条形图,对不起!
$.getJSON("data.json", function (json) {
  // will generate array with ['Monday', 'Tuesday', 'Wednesday']
  var labels = json.map(function(item) {
    return item.timestamp;
  });

  var data = {
    labels: labels,
    datasets: [
    {
      label: "My First dataset",
      fillColor: "rgba(220,220,220,0.5)",
      strokeColor: "rgba(220,220,220,0.8)",
      highlightFill: "rgba(220,220,220,0.75)",
      highlightStroke: "rgba(220,220,220,1)",
      data: [65, 59, 80, 81, 56, 55, 40]
    },
    {
      label: "My Second dataset",
      fillColor: "rgba(151,187,205,0.5)",
      strokeColor: "rgba(151,187,205,0.8)",
      highlightFill: "rgba(151,187,205,0.75)",
      highlightStroke: "rgba(151,187,205,1)",
      data: [28, 48, 40, 19, 86, 27, 90]
    }
    ]
  };

  var ctx = document.getElementById("myChart").getContext("2d");
  ctx.canvas.width = 1000;
  ctx.canvas.height = 800;

  var myChart = new Chart(ctx).Bar(data);
});