0

私は現在、morris.jsを使用してグラフを作成しようとしています。1つのJSONオブジェクトが与えられ、別のオブジェクトのように見せかける必要があります。Morris.jsには、次のような配列が必要です

var day_data = [
        {"period": "2012-10-01", "licensed": 3407, "sorned": 660},
        {"period": "2012-09-17", "licensed": 3171, "sorned": 660},
        {"period": "2012-09-16", "licensed": 3171, "sorned": 676},
        {"period": "2012-09-15", "licensed": 3201, "sorned": 656},
        {"period": "2012-09-10", "licensed": 3215, "sorned": 622}
        ];

オブジェクトが混乱しているように見える場合のリンクは次のとおりです。これは、サイトhttp://oesmith.github.com/morris.js/にある最初のグラフのデータの短縮版である必要があります 。その非常に単純なピリオドはx座標であり、ライセンスされたものとsornedは対応する線のy座標です。

これが私が与えられたデータです

var trendline = {"command":[
    {"keyValuePairs":["2012-08-10 22:00:00|1884978","2012-08-10 21:00:00|3135378","2012-08-10 18:00:00|2541438","2012-08-09 20:00:00|647082","2012-08-10 19:00:00|3194772","2012-08-09 16:00:00|2782140","2012-08-10 20:00:00|3669924"],
    "keyword":"Obama"},
    {"keyValuePairs":["2012-08-10 22:00:00|1884978","2012-08-10 21:00:00|3135378","2012-08-10 18:00:00|2541438","2012-08-09 20:00:00|647082","2012-08-10 19:00:00|3194772","2012-08-09 16:00:00|2782140","2012-08-10 20:00:00|3669924"],
    "keyword":"Romney"}]}

keyValuePairsからすべてのデータを抽出し、それをそのキーワードに関連付ける必要があるため、最初の配列のようになります

{"period": "2012-10-01", "Obama": 1884978, "Romney": 1884978},
 ...
 ...

トレンドラインのJSONオブジェクトからデータを取得することは知っていますが、morris.jsプラグインが使用できる新しいJSONオブジェクトを作成する方法がわかりません。具体的には、変数を使用してJSONオブジェクトを作成する方法がわかりません。

trendline.dog = [cat];

フィールドdogを値catに設定してjsonオブジェクトを作成します。ただし、各キーワード(obama、romney ...など)を取得し、それに関連付けられたフィールドを設定して値を設定する必要があります。フィールドの数や名前がわからないため、このオブジェクトの作成方法がわかりません。

私はその部分を書かないので、私がデータを与えられる方法を変えることができないと仮定します。また、私の例のように2つのキーワード(obama / romney)のみを指定することも、y値に任意の数のキーワードを指定することもできます。

長いのでごめんなさい。どんな助けでもいただければ幸いです。御時間ありがとうございます。

4

1 に答える 1

1

これがあなたのクリスマスプレゼントです。

<script type="text/javascript">
var trendline =
    {
        "command": [
        {
            "keyValuePairs":
                [
                "2012-08-10 22:00:00|1884978",
                "2012-08-10 21:00:00|3135378",
                "2012-08-10 18:00:00|2541438",
                "2012-08-09 20:00:00|647082",
                "2012-08-10 19:00:00|3194772",
                "2012-08-09 16:00:00|2782140",
                "2012-08-10 20:00:00|3669924"
                ],
            "keyword": "Obama"
        },
        {
            "keyValuePairs":
                [
                    "2012-08-10 22:00:00|1884978",
                    "2012-08-10 21:00:00|3135378",
                    "2012-08-10 18:00:00|2541438",
                    "2012-08-09 20:00:00|647082",
                    "2012-08-10 19:00:00|3194772",
                    "2012-08-09 16:00:00|2782140",
                    "2012-08-10 20:00:00|3669924"
                ],
            "keyword": "Romney"
        }]
    }
var cmd = trendline.command,
    day_data = [],
    split,
    date,
    num,
    obj;
//
for (var i = 0; i < cmd.length; i++) {
    //
    if (i == 1) { break; };
    //
    for (var ii = 0; ii < cmd[i].keyValuePairs.length; ii++) {
        //debugger
        split = cmd[i].keyValuePairs[ii].split('|');
        date = split[0].substring(0, split[0].indexOf(' '));
        num = split[1];

        obj = {};
        obj['period'] = date;
        //Can 1
        obj[cmd[i].keyword] = num;
        //
        split = cmd[i + 1].keyValuePairs[ii].split('|');
        num = split[1];
        //Can 2
        obj[cmd[i + 1].keyword] = num;
        //
        day_data.push(obj);
    };
};

于 2012-09-04T01:12:15.737 に答える