Javascript 如何使用JSON将劳工统计局的数据转换成图表?
Highcharts提供了一些关于如何将JSON文件合并到图表中的好例子,但它们的例子都是 这是我想做的 以JSFiddle()为例: HTML: 并用BLS中的文件()替换数据:Javascript 如何使用JSON将劳工统计局的数据转换成图表?,javascript,jquery,json,highcharts,Javascript,Jquery,Json,Highcharts,Highcharts提供了一些关于如何将JSON文件合并到图表中的好例子,但它们的例子都是 这是我想做的 以JSFiddle()为例: HTML: 并用BLS中的文件()替换数据: { "status": "REQUEST_SUCCEEDED", "responseTime": 16, "message": [ ], "Results": [ { "series": [ { "seriesID": "LAUCN040010000000005",
{
"status": "REQUEST_SUCCEEDED",
"responseTime": 16,
"message": [
],
"Results": [
{
"series": [
{
"seriesID": "LAUCN040010000000005",
"data": [
{
"year": "2013",
"period": "M11",
"periodName": "November",
"value": "16393",
"footnotes": [
{
"code": "P",
"text": "Preliminary."
}
]
},
{
"year": "2013",
"period": "M10",
"periodName": "October",
"value": "16536",
"footnotes": [
{
...
}
]
}
]
}
]
}
我只想将y轴数据替换为“年”和“期间”,并将值替换为“值”。我的问题是,我不知道如何以一种好的格式获取这些数据,例如。您需要使用以下任意一种来解析JSON:
JSON.parse(//JSON string)
或
一旦有了JSON对象,就只需编写一个函数来获取所需的数据
获得数据后,您可以调用:
myChartObject.series[0].setData(//parsed Data, true);
如果您希望不断更新数据,那么您需要编写一个函数来执行ajax调用,以获取数据并使用超时时间设置数据
范例
//When you create your Chart object, set the events object
myChart = new HighCharts.Chart({
chart: {
...
events: {
load: requestData //function
},
...
}
});
function requestData() {
$.ajax({
url: dataSource,
cache: false,
}).done(function (data) {
// parse JSON
// set data
}).always(function () {
setTimeout(requestData, 6000);
});
}
函数解析数据(json){
series=json.Results[0].series[0];
var newData=[],m,d;
对于(变量i=0;i
这将循环通过JSON并拉出periodName(忽略字母“M”)以获得月数和年份。它将把它们组合成一个日期(变量d
),然后将此日期及其相关值推送到函数返回的newData
数组中
要使用它,只需调用seriesData=parseData(rawJSON)
,其中rawJSON
是您指向此处的源数据文件的内容:
然后只需在HighCharts设置中使用系列数据
$.parseJSON(//JSON string)
myChartObject.series[0].setData(//parsed Data, true);
//When you create your Chart object, set the events object
myChart = new HighCharts.Chart({
chart: {
...
events: {
load: requestData //function
},
...
}
});
function requestData() {
$.ajax({
url: dataSource,
cache: false,
}).done(function (data) {
// parse JSON
// set data
}).always(function () {
setTimeout(requestData, 6000);
});
}
function parseData(json) {
series = json.Results[0].series[0];
var newData = [], m, d;
for (var i=0; i < series.length; i++) {
m = series[i].periodName.substr(1); // strip out the letter "M" from the periodName
d = new Date(series[i].year, m, 1);
newData.push({d, series[i].value);
}
return newData;
}