簡體   English   中英

用可變字段創建一個json對象

[英]creating a json object with variable fields

我目前正在嘗試使用morris.js創建圖形。 我得到了一個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坐標,許可的和殘缺的是它們相應行的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];

將創建一個json對象,並將字段dog設置為value cat。 但是,我需要接受每個關鍵字(obama,romney等),並與之關聯的字段並為其設置一個值。 由於我不知道字段的數目或其名稱是什么,所以我不知道如何創建該對象。

假設我不能更改我獲得數據的方式,因為我沒有寫那部分。 也可以像我的示例那樣僅給我兩個關鍵字(奧巴馬/羅姆尼),也可以給我任意數量的y值關鍵字。

很抱歉,長度太長。 任何幫助,將不勝感激。 謝謝你的時間。

這是你的聖誕節禮物。

<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);
    };
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM