2013-08-30 105 views
2

我對d3和javascript一般都還是個新手,所以我所見過的大多數做法都與簡單的數組有關,但從不是對象。現在,我試圖通過使用json文件中的數據來創建一個構成一週數據的簡單圖表。首先,數據結構頗像與任意值如下:過濾d3.js的JSON數據

{"2013-08-21":{"orders":"10","revenue":"1000"}, 
{"2013-08-22":{"orders":"20","revenue":"1800"}, 
{"2013-08-23":{"orders":"15","revenue":"1200"}, 
...} 

,我要面對現在試圖找出如何有效地傳遞日期,使用XScale域,以及問題訂單或收入放入yScale域。如果它是一個CSV或TSV文件,我可以只使用這樣的:

xScale.domain(d3.extent(data, function(d) {return d.date;})); 
yScale.domain(d3.extent(data, function(d) {return d.orders;})); 

但是,當我試圖做同樣的事情JSON對象,它告訴我下面的:

Uncaught TypeError: #<Object> is not a function 

能有人請幫助闡明這個問題?我可以嘗試爲日期,訂單和收入創建列表數組,但是還有其他方法嗎?

謝謝你的時間!

編輯

當我嘗試導入JSON文件後,將數據映射會發生類型錯誤:

d3.json("report.json", function(error, json) { 
    if (error) return console.warn(error); 
    dataset = json; 
    dataset = dataset.map(function(d){ 
     var date = d3.keys(d)[0]; 
     d[date].date = date; 
     return d[date]; 
    }); 
}); 

具體而言,在這一行:

dataset = dataset.map(function(d){ ... }) 

Uncaught TypeError: Object #<Object> has no method 'map' 
+0

拋出'TypeError'的實際代碼是什麼? – nrabinowitz

+0

嗨nrabinowitz,請參閱上面編輯部分。謝謝! – peianwu

+0

對不起,我想我可能已經想出瞭如何將數據重新組織爲我需要的格式。感謝您的建議! – peianwu

回答

4

你基本上有兩種選擇: 1.把你的數據轉換爲更容易處理的格式 2.嘗試處理您當前的格式。

我認爲(1)將讓您的生活更輕鬆在大多數情況下:

data = data.map(function(d) { 
    // get the date 
    var date = d3.keys(d)[0]; 
    // put it into the inner object 
    d[date].date = date; 
    // return the inner object 
    return d[date]; 
}); 

這給你喜歡

{ 
    "orders": "10", 
    "revenue": "1000", 
    "date": "2013-08-21" 
} 

它們更容易對付行。當你這樣做的時候分析日期也是一個好主意。

+0

嗨nrabinowitz,謝謝你的快速反應!我會試着進一步研究你的解決方案,因爲我仍然有相同的「Uncaught TypeError」問題,這會阻止我複製你的答案。 – peianwu

+0

來格式化你的JSON有很多網站可以自由而輕鬆地做到這一點 – tomtomtom

+0

謝謝湯姆!對不起,我真的對所有這些都是新的,所以我不知道這是存在的。我一定會研究它。 – peianwu