1

数日から読んでテストした後(そしてすでにここに投稿していますが、間違った質問をしています)私は何度も何度も失敗するので、本当にあなたが必要です...

私の目標:同じチャート(および将来的には多くのチャート)に多くのシリーズを作成する私のデータソース:mysqlおよびjson出力:

"[{"name":"Station 1","data":"1360191600,398.625"},{"name":"Station 1","data":"1360192500,398.625"},{"name":"Station 1","data":"1360193400,398.25"},{"name":"Station 1","data":"1360194300,397.375"},{"name":"Station 1","data":"1360195200,397.5"},{"name":"Station 1","data":"1360196100,397.5"},{"name":"Station 1","data":"1360199700,396.75"},{"name":"Station 1","data":"1360200600,397"}...

これらのデータは一例です。通常は多くのステーションがあり、タイムスタンプ データのみのステーションもあります。

現時点での私の大きな失敗は、これらの情報を series:[] オプションに送信することです。

私はこのようないくつかのループを試しました:

            data=JSON.parse(data) ;
            var series = [];
            series.data = [];
            $.each(data,function(i,ligne) {

                var string = JSON.stringify(ligne);
                var obj = $.parseJSON(string);
                //var index_serie = obj.name.slice(0,1) ;
                console.log(obj) ;
                points=(obj.data) ;
                series.name=obj.name ;
                series.data.push(points) ;
            }) ;
            options.series.push(series) ;
            console.log(options.series) ;

            var chart = new Highcharts.Chart(options);

チャートのオプションは、ajax 呼び出しの前に定義されます。

["name":"station1","data":"[1321654,10],[5465...] のような他の形式の json を試してみましたが、SQL クエリに [] を追加するのが難しく、 GROUP_CONCAT にはいくつかの制限があります (2014 文字)

名前などで複数のシリーズをレンダリングするために素敵なループを作成するのを手伝ってください

ご協力いただきありがとうございます...

4

1 に答える 1

2

その「ほぼ」JSON を「別の」JSON に変更できませんか? 多分このようなもの:

[{
    "name":'station 1',
    "data": [ [360191600,398.625], [360191600,398.625], [360191600,398.625] ... [360191600,398.625] ]
}, {
    "name":'station 2',
    "data": [ [360191600,398.625], [360191600,398.625], [360191600,398.625] ... [360191600,398.625] ]
}]

そうでない場合は、値の解析を追加する必要があります。例:

data = JSON.parse(data);
var names = [];
$.each(data, function (i, ligne) {
    var ind = names.indexOf(ligne.name),
        splited = ligne.data.split(','),
        x = parseFloat(splited[0]),
        y = parseFloat(splited[1]);
    if (ind == -1) {
        /*series name spotted first time need to add new series */
        ind = names.push(ligne.name) - 1;
        options.series.push({
            data: [],
            name: ligne.name
        });
    } 
    if(!isNaN(x) && !isNaN(y)){
        options.series[ind].data.push([x,y]);    
    }
});

そしてjsfiddleの作業:http://jsfiddle.net/3bQne/40/

于 2013-02-12T13:25:43.633 に答える