2016-04-27 123 views
0

我使用d3.js的「d3.json();函數伸手從REST API獲取一些數據如何在此JSON文件中引用此數據?

數據回來,因爲這:

{ 
"offset" : 0, 
"rows": [ 
{ "_id": 
    { "$oid" : "1234567" }, 
     "mockupData" : [ { 
      "Analysis" : "Test", 
      "Description" : "The Test indicates...", 
      "Data" : [ 
      { "Category" : "A", 
       "Statistic" : 0.15, 
       "Value" : 0.95 }, 
      { "Category" : "B", 
       "Statistic" : 0.65, 
       "Value" : 0.85 }, 
      ] } ] } 
      ], 
    "total_rows" : 1 , 
    "query" : {} , 
    "millis" : 0 
} 

我有一個極其艱難的時刻到JSON下鑽來獲得我想要的

我試圖將其設置是這樣的:

function generateChart(){ 
    var chart; 
    var Category = [{key:"Stuff", values:[]}]; 
    d3.json('http://url_that_returns_json/', function(error,data{ 
     for(var key in data._SOMETHING_){ 
      switch(key){ 
      case "A": 
       Category[0] ["values"].push({"label":"Statistic","value""data.Category[key]}); 
... // same for B 
}) 

// more graph logic 

我似乎缺少一些entir關於這方面的知識片段。指導?幫幫我?

在此先感謝。

回答

2

這裏是一個小提琴我已經實現:https://jsfiddle.net/thatOneGuy/486mwb86/1/

首先,我設置的數據作爲變量,所以我可以在以後使用它。所以:

var data = { 
    "offset": 0, 
    "rows": [{ 
    "_id": { 
     "$oid": "1234567" 
    }, ... //and so on 

這是你使用是完全一樣的:

d3.json('http://url_that_returns_json/', function(error,data{ 

兩個數據變量是相同的。

然後我到了想要的檢查點,即在數據屬性的類別,例如:

var thisDataSet = data.rows[0].mockupData[0].Data; 

由於這是一個數組,而不是一個對象,我用一個for循環迴路通過:

for (var i = 0; i < thisDataSet.length; i++) { 

而且,在我看來,你沒有,因爲它看起來像你只是想填充Category.values與不同類別需要一個switch語句。所以,我只是推類別的當前值數據集中到這個Category.values

Category[0]["values"].push({ 
     "label": "Statistic", 
     "value": thisDataSet[i].Category //push category here 
    }); 

就是這樣。檢查控制檯日誌輸出。應該工作正常。全功能:

function generateChart() { 
    var chart; 
    var Category = [{ 
    key: "Stuff", 
    values: [] 
    }]; 
    console.log(data.rows[0].mockupData[0].Data) 
    var thisDataSet = data.rows[0].mockupData[0].Data; 
    for (var i = 0; i < thisDataSet.length; i++) { 
    //for (var key in data.rows[0].mockupData[0].Data) { 
    console.log(thisDataSet[i]) 
    Category[0]["values"].push({ 
     "label": "Statistic", 
     "value": thisDataSet[i].Category 
    }); 
    } 
    console.log(Category) 
} 
+0

我會解釋我做了什麼,但那是你想要的嗎?檢查控制檯日誌 – thatOneGuy

+0

這肯定會讓我走上路,我衷心感謝您的幫助。我遵循你的所作所爲,但我都是一個很好的演練。我會做出一些改變,看看我能得到多少,然後發佈結果。 – Kickasstimus

+0

@ Kickasstimus檢查更新的答案,添加說明 – thatOneGuy