正在将 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!!!
我想我可能遇到的是一个简单的问题。这很好用..
$(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!!!