2014-06-16 75 views
0

我想從JSON對象中創建一個Javascript對象。這是因爲我想用一個需要特殊數據集的.js插件製作圖形。他需要下列對象數據:動態構建javascript對象

var data = { 
labels : ["January","February","March","April","May","June","July"], 
datasets : [ 
    { 
     fillColor : "rgba(220,220,220,0.5)", 
     strokeColor : "rgba(220,220,220,1)", 
     pointColor : "rgba(220,220,220,1)", 
     pointStrokeColor : "#fff", 
     data : [65,59,90,81,56,55,40] 
    }, 
    { 
     fillColor : "rgba(151,187,205,0.5)", 
     strokeColor : "rgba(151,187,205,1)", 
     pointColor : "rgba(151,187,205,1)", 
     pointStrokeColor : "#fff", 
     data : [28,48,40,19,96,27,100] 
    } 
] } 

和我的JSON對象看起來像這樣(不介意的數據,它的測試數據)。我的JSON對象沒有問題。已通過一些JSON驗證在線:

{ "Metingen": [ 
    { 
     "Temp": "25.00", 
     "Humy": "37.40", 
     "Time": [ 
      { 
       "Uur": "22", 
       "Minuut": "32", 
       "Second": "15", 
       "Dag": "15", 
       "Maand": "06", 
       "Jaar": "2014" 
      } 
     ] 
    }, 
    { 
     "Temp": "25.00", 
     "Humy": "37.20", 
     "Time": [ 
      { 
       "Uur": "22", 
       "Minuut": "32", 
       "Second": "15", 
       "Dag": "15", 
       "Maand": "06", 
       "Jaar": "2014" 
      } 
     ] 
    } ] } 

所以我需要把所有標籤的「達格」的價值觀,數據集[0]。數據所需要的「溫度」和數據集1。數據需要「Humy 「來自我的JSON對象的值。但是,我該如何動態地做到這一點?因爲Temp和Humy值的數量會隨着每次頁面刷新而改變。我已經嘗試過,但這不起作用。 (我已經離開了Humy數據集在這裏簡化它

var dataBuilder = new Object(); 

for(i = 0; i < objs.Lijnen;i++) { 
    dataBuilder.labels[i] = objs.Metingen[i].Time[0].Dag; 
    dataBuilder.datasets[0].data[i] = objs.Metingen[i].Temp; 
} 
dataBuilder.datasets[0].fillColor = "rgba(220,220,220,0.5)"; 
dataBuilder.datasets[0].strokeColor = "rgba(220,220,220,1)"; 
dataBuilder.datasets[0].pointColor = "rgba(220,220,220,1)"; 
dataBuilder.datasets[0].pointStrokeColor = "#fff"; 

但後來我得到一個上線4 「無法設置屬性‘0’的未定義」我也嘗試了以下幾件事:

for(i = 0; i < objs.Lijnen;i++) { 
    dataBuilder[labels][i] = objs.Metingen[i].Time[0].Dag; 
    dataBuilder[datasets][0][data][i] = objs.Metingen[i].Temp; 
} ... (code omitted) 

我讀的地方,JavaScript對象僅僅是數組的數組,但這並不因爲「標籤」,「數據集」和「數據」是不確定的工作邏輯,所以我想這一個還有:

for(i = 0; i < objs.Lijnen;i++) { 
    dataBuilder["labels"][i] = objs.Metingen[i].Time[0].Dag; 
    dataBuilder["datasets"][0]["data"][i] = objs.Metingen[i].Temp; 
} (code omitted) 

但在這裏我也遇到了一個錯誤。我檢查了objs.Metingen [i] .Time [0] .Dag和objs.Metingen [i] .Temp,他們的工作很完美。所以,任何人都知道如何將我的JSON數據解析爲Graph插件所需的數據庫?也許JQuery? (有關Graph plugin is here的更多信息)對不起,很長的文章。

回答

0

有幾個問題與你的第一個代碼:

  1. 對象dataBuilder不正確初始化,考慮到你以後使用它的方式。考慮這個代碼也導致「無法設置屬性‘0’的未定義」:

    obj = Object(); 
    obj.array[0] = 1000; 
    

    在上面的,obj是確實是一個對象,它可以有一個屬性命名爲「陣」,但該屬性尚不存在 - 因此,你不能分配任何東西給它的'0'成員(因爲它還不是一個數組,在這一點上,它是「未定義的」)。適當的例子:

    obj = Object(); 
    obj.array = Array(); 
    obj.array[0] = 1000; 
    

    或者,更簡單:

    obj = {array: []}; 
    obj.array[0] = 1000; 
    

    這創建具有屬性 「陣列」,其爲空數組的對象。

  2. 假設objs.Lijnen是一個對象,「i < objs.Lijnen」總是錯誤的。您可能需要的是「objs.Lijnen.Metingen.length」或「objs.Metingen.length」(不確定objs.Lijnen是否爲Metingen的拼寫錯誤或父對象)。

  3. 假設Lijnen不是一個錯字,它是Metingen的父母,您需要將objs.Metingen更改爲objs.Lijnen.Metingen。

工作代碼:

var obj = {Lijnen: JSON.parse(YOUR_JSON_STRING) }; 

... 

var dataBuilder = {labels: [], datasets: []}; // properly initialized object 

for(i = 0; i < objs.Lijnen.Metingen.length;i++) { // .length 
    dataBuilder.labels[i] = objs.Lijnen.Metingen[i].Time[0].Dag; 
    if (!dataBuilder.datasets[0]) dataBuilder.datasets[0] = { data: [] }; 
    dataBuilder.datasets[0].data[i] = objs.Lijnen.Metingen[i].Temp; 
} 
dataBuilder.datasets[0].fillColor = "rgba(220,220,220,0.5)"; 
dataBuilder.datasets[0].strokeColor = "rgba(220,220,220,1)"; 
dataBuilder.datasets[0].pointColor = "rgba(220,220,220,1)"; 
dataBuilder.datasets[0].pointStrokeColor = "#fff"; 
+0

奧凱,得到它現在的工作,我剛換了「VAR dataBuilder ......」行到你現在的數據分析程序沒有問題! – Reggi

+0

快速問題,當我想要更多然後1個數據集時怎麼辦?因爲當我調用數據集[1]時,我得到相同的錯誤。 – Reggi

+0

我在上面的「if」行中首次使用它時編輯了分配數據數組的代碼 – fstanis