正在将 JSON 加载到 Highcharts 饼图中

Loading JSON into a Highcharts pie chart

我想我可能遇到的是一个简单的问题。这很好用..

$(document).ready(function() { // Original data var data = [{ "name": "Tokyo", "y": 3.0 }, { "name": "NewYork", "y": 2.0 }, { "name": "Berlin", "y": 3.5 }, { "name": "London", "y": 1.5 }]; var chart = new Highcharts.Chart({ chart: { renderTo: 'container', type: 'pie' }, series: [{ data: data }] }); });

我想修改代码以使用 getJSON 加载并且 JSON 格式正确。 所以我这样做了...

$(document).ready(function() { $.getJSON("etstats?rtype=bestpgs_ec&month=2016-06-01&no_requested=10", function(json){ var data = json var chart = new Highcharts.Chart({ chart: { renderTo: 'container', type: 'pie' }, series: [{ data: data }] }); }); });

我检查了 Firebug 中的 JSON 并且使用 "name" 和 "y"

格式正确

[{"name": "14704", "y": "0.17"}, {"name": "14706", "y": "0.20"}, {"name": "21304", "y": "0.25"}, {"name" : "23201", "y": "0.39"}, {"name": "23501", "y": "0.42"}, {"name": "17102", "y": "0.46"}, {"name": "15001" , "y": "0.48"}, {"name": "23002", "y": "0.50"}, {"name": "13201", "y": "0.50"}, {"name": "17401", "y" : "0.52"}]

有人对我的图表无法呈现的原因有任何指示吗?

注意:编辑以添加答案。引用的值是问题所在。通过迭代它们并评估值来删除它们。

$.getJSON("etstats?rtype=bestpgs_ec&month=2016-06-01&no_requested=10", function(json){ data = json $.each(data, function (i, point) { point.y = eval(point.y); }); var chart = new Highcharts.Chart({

你能检查一下你对 getJSON 的回复是 json 字符串吗?如果是,你应该这样做:

var data = JSON.parse(json);

我使用上面给出的数据。我认为 highchart 不接受 string 输入 y

这里是 demo

有效的JSON格式应该是

[
  {"name":"14704","y":0.17},
  {"name":"14706","y":0.2},
  {"name":"21304","y":0.25},
  {"name":"23201","y":0.39},
  {"name":"23501","y":0.42},
  {"name":"17102","y":0.46},
  {"name":"15001","y":0.48},
  {"name":"23002","y":0.5},
  {"name":"13201","y":0.5},
  {"name":"17401","y":0.52}
]

在你的 getJSON 完成后,记得先做 JSON.parse 以获得正确的对象,然后你才能最终将它传递到 highchart

这是我使用 jQuery

从 MySQL 更新饼图数据的解决方案

首先,在 PHP 中:创建一个包含 value/name 对的数组,并确保 return "json_encode"d 数据:

   ... [code] ...
   while($aRow = mysqli_fetch_assoc($oRes)){
      $aData[] = array("y" => $aRow['number'], "name" => $aRow['string']);
   }
   exit(json_encode($aData));

其次,创建图表:

    oGraph = new Highcharts.chart({
       chart: {
          renderTo: 'graphid',
       ... [code] ...
       plotOptions: {
          pie: {
       ... [code] ...
       series: [{
          name: 'MyName',
          data: []
       ... [code] ...
   });

三、构建jQuery获取数据的代码:

   $.ajax({
      type     : 'post',
      url      : '/path/to/the/above/php/data-script.php',
      dataType : 'json'
   }).done(function( oJson ) {
      var oObj = [];
      $.each(oJson, function(ix,sliceData) {
         oObj.push({
            name: sliceData.name,
            y: eval(sliceData.y)
         });
      });
      oGraph.series[0].setData(oObj, true);
   });

我花了一整天才意识到我必须 (1) 重新打包数据 (2) 使用 eval() 作为值参数 y!!!