javascript - 具有来自多个 JSON 文件的值的 Highcharts

标签 javascript jquery json highcharts getjson

目前我已经设置了以下 Highchart 代码,我想替换我的图表静态数据系列值,该值包含在要从 JSON 文件加载的 HTML 文件中。

当前代码如下所示:

<!doctype html>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript" src="https://code.highcharts.com/highcharts.js" charset="utf-8"></script>
<div style "class:container; align:center">
  <div id="myChart" style="width: 315px; height: 315px; background-color: #FFF8EB; align:center"></div>
</div>
<script>
  $(function() {
    var chart = new Highcharts.Chart({
      title: {
        text: 'Comparison'
      },
      chart: {
        type: 'line',
        backgroundColor: "#FFF8EB",
        renderTo: 'myChart'
      },
      xAxis: {
        title: {
          text: 'Day of the Year'
        },
        tickInterval: 7,
        ceiling: 366,
        min: 1,
        max: 366,
        minPadding: 0.0,
        maxPadding: 0.0
      },

      yAxis: {
        title: {
          text: 'Kilometers'
        },
        tickInterval: 250,
        lineWidth: 1,
        minPadding: 0.0,
        maxPadding: 0.0,
        offset: 0,
        min: 0
      },
      labels: {
        align: 'right',
        step: 30,
        x: 0,
        y: 0
      },
      series: [{
          name: '2013',
          color: '#77B753',
          lineWidth: 3,
          data: [
            [64, 56.22],
            [128, 755.13],
            [160, 1412.96],
            [202, 2125.98],
            [236, 2947.44],
            [294, 3761.47],
            [358, 4097.91],
            [359, 4162.09],
            [362, 4450.29],
            [363, 4552.25]
          ]
        },
        {
          name: '2014',
          color: '#F29B68',
          lineWidth: 3,
          data: [
            [4, 21.73],
            [124, 1751.75],
            [204, 3741.57],
            [234, 4517.99],
            [273, 5386.65],
            [304, 6073.86],
            [327, 6276.24],
            [333, 6332.13],
            [359, 6615.71],
            [360, 6688.89],
            [360, 6711.41],
            [361, 6749.21],
            [362, 6835.68],
            [363, 6909.45]
          ]
        },
        {
          name: '2015',
          color: '#6193CF',
          lineWidth: 3,
          data: [
            [11, 31.9],
            [66, 406.6],
            [102, 1004.81],
            [115, 1498.8],
            [126, 1777.21],
            [154, 2535.4],
            [198, 3422.83],
            [216, 4063.94],
            [248, 4778.75],
            [279, 5388.67],
            [309, 5772.34],
            [314, 5772.34],
            [335, 5930.32],
            [359, 6433.87]
          ]
        }
      ]
    });
  });

</script>
</!doctype>

有没有办法从 JSON 文件加载系列数据/值,如下所示:

[{"key":"154","value":38.91},{"key":"154","value":38.91},{"key":"158","value":136.46},{"key":"159","value":261.07},{"key":"165","value":275.09},{"key":"180","value":285.2},{"key":"186","value":303.49},{"key":"187","value":333.41},{"key":"189","value":369.3},{"key":"191","value":395.63},{"key":"196","value":456.42},{"key":"198","value":488.58},{"key":"200","value":518.69},{"key":"204","value":573.74},{"key":"206","value":637.92},{"key":"210","value":675.29},{"key":"212","value":732.73},{"key":"214","value":778.25},{"key":"218","value":828.53},{"key":"221","value":869.79},{"key":"225","value":925.21},{"key":"227","value":983.09},{"key":"244","value":1003.99},{"key":"247","value":1040.65},{"key":"249","value":1077.33},{"key":"251","value":1105.82},{"key":"253","value":1142.46},{"key":"259","value":1179.35},{"key":"266","value":1214.63},{"key":"271","value":1261.37},{"key":"272","value":1360.57},{"key":"273","value":1385.49},{"key":"291","value":1449.99},{"key":"294","value":1468.74},{"key":"297","value":1521.53},{"key":"358","value":1572.62},{"key":"359","value":1664.44},{"key":"361","value":1725.83},{"key":"362","value":1827.49},{"key":"363","value":1888.31},]

它应该如下所示,但我如何调用它/获取“系列”中的值:

var ytkm2013 = new Array();
    $.getJSON('https://link/to/my/data/2013-yearly-distance.json', function(data) {
    for (i = 0; i < data.length; i++){
        ytkm2013.push([data[i].key, data[i].value]);
    }
    });

由于我不是 Java/JavaScript 专家,因此欢迎任何帮助/想法。

谢谢, 铝

最佳答案

你已经快要达到你想要的了。您只需要做一些小的更改。

首先,您的图表显示了三个数据系列,但您的 JSON 示例只有一个数据数组,因此下面的示例适用于一个数据数组。

您需要做的第一件事是将图表代码放入 $.getJSON 回调中,因为 $.getJSON 返回一个 promise ,因此您应该仅在之后实例化图表数据返回并由您处理。

处理完所有数据并将其添加到 ytkm2014 数组后,您只需将该系列传递给该数组即可(如下例所示)。

它应该看起来像这样:

var ytkm2013 = new Array();

$.getJSON('https://link/to/my/data/2013-yearly-distance.json', function(data) {
  for (i = 0; i < data.length; i++) {
    ytkm2013.push([data[i].key, data[i].value]);

    var chart = $("#myChart").highcharts({
      title: {
        text: 'Comparison'
      },
      chart: {
        type: 'line',
        backgroundColor: "#FFF8EB",
        renderTo: 'myChart'
      },
      xAxis: {
        title: {
          text: 'Day of the Year'
        },
        tickInterval: 7,
        ceiling: 366,
        min: 1,
        max: 366,
        minPadding: 0.0,
        maxPadding: 0.0
      },

      yAxis: {
        title: {
          text: 'Kilometers'
        },
        tickInterval: 250,
        lineWidth: 1,
        minPadding: 0.0,
        maxPadding: 0.0,
        offset: 0,
        min: 0
      },
      labels: {
        align: 'right',
        step: 30,
        x: 0,
        y: 0
      },
      series: [{
        name: '2013',
        color: '#77B753',
        lineWidth: 3,
        data: ytkm2013
      }]
    });
  }
});

我不确定进行多次调用来获取不同文件是否是最佳实践,但如果您仍然想这样做,则需要确保在创建图表时加载所有文件。你可以尝试这样的事情:

data2013 = [];
data2014 = [];
data2015 = [];

$.getJSON('http://link2013', function (data) {
    //populate data2013

    $.getJSON('http://link2014', function (data) {

        //populate data2014

        $.getJSON('http://link2015', function (data) {

            //populate data2015

            //create the chart

        });

    });

});

如果您有多个系列,则必须将它们作为单独的对象传递到 series 数组。做法是这样的:

series : [{
        name : '2013',
        color : 'red',
        lineWidth : 3,
        data : ytkm2013
    }, {
        name : '2014',
        color : 'blue',
        lineWidth : 3,
        data : ytkm2014
    }, {
        name : '2015',
        color : 'green',
        lineWidth : 3,
        data : ytkm2015
    }
]

关于javascript - 具有来自多个 JSON 文件的值的 Highcharts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34496260/

相关文章:

json - 休息套件 : multipartFormRequestWithObject not json

java - Android中将json格式的数据转换/解析为java

ios - 如何在 Swift 中显示已解析的 JSON 数据?

javascript - 奇怪的错误TypeError : Cannot read property 'setValue' of null at onSuccessMapUnitFields [closed]

javascript - 如何固定div按钮的位置

javascript - jquery news ticker 在淡入和淡出时出现错误

javascript - mint.com javascript 下拉效果

javascript - 如何求和两个对象的属性?

javascript - 我的数据显示不正确。 Jade 和 AngularJS

javascript - 多个键的 JSON 过滤运行缓慢