2012-06-07 61 views
62

我在學習d3。 d3 js中有certain ways of loading the data。但是他們都似乎做了一個HTTP GET。在我的場景中,我已經有了一個字符串中的json數據。我怎樣才能使用這個字符串,而不是另一個http請求?我試圖尋找這個文件,但沒有發現。d3 js - 加載沒有http的json得到

這工作:

d3.json("/path/flare.json", function(json) { 
    //rendering logic here 
} 

現在,如果我有:

//assume this json comes from a server (on SAME DOMAIN) 
var myjson = '{"name": "flare","children": [{"name": "analytics","children": [{"name": "cluster","children": [{"name": "MergeEdge", "size": 10 }]}]}]}'; 

如何使用已經在D3 &計算 'myjson' 避免異步調用服務器?謝謝。

+0

你想用這個對象做什麼?另外,爲什麼要將它作爲一個字符串進行硬編碼而不是作爲普通的JavaScript對象? – Pointy

+1

@Pointy服務器將其作爲響應中的模型屬性返回。所以我有字符串。對於例如,我對應於http://mbostock.github.com/d3/ex/bubble.html中的代碼這就是那裏的邏輯 – Ravi

+0

也參見http://stackoverflow.com/questions/20940854/how-to-load-data-from-an-an-an-json-array-only-than-from-an-external-resour –

回答

80

只需使用

json = JSON.parse(myjson); 

如更換d3.json電話:

var myjson = '{"name": "flare","children": [{"name": "analytics","children": [{"name": "cluster","children": [{"name": "MergeEdge", "size": 10 }]}]}]}'; 

// d3.json("/path/flare.json", function(json) { #delete this line 

    json = JSON.parse(myjson); //add this line 

    //rendering logic here 

//} #delete this line 

UPDATE 09/2013

原始代碼已經改變。所以VARNAME jsonroot

// d3.json("flare.json", function(error, root) { #delete this line 

    root = JSON.parse(myjson); //add this line 

    //rendering logic here 

//} #delete this line 
+1

得到這個部分。你可以讓我知道如何使用這個解析的'json'對象來渲染圖形(沒有做出reqeust)在這裏找到http://mbostock.github.com/d3/ex/bubble.html這個例子使用* d3。 json(「../ data/flare.json」,函數(json)*,它會發起一個http調用) 任何指向文檔/示例的指針都會有幫助。謝謝。 – Ravi

+6

@Ravi用'json = JSON.parse(myjson);'並刪除行'33'。試試吧 –

+0

試過了,完美的工作!現在我看到發生了什麼......謝謝! – Ravi

2

根據該示例:

http://phrogz.net/JS/d3-playground/#StockPrice_HTML

在這裏它們被存儲到變量$數據內的圖形數據,並通過設置的.data它($數據)功能。

我會將此方法應用於您正在使用的任何圖表。

+0

這可能工作;他們在這裏有一個類似的例子:https://github.com/mbostock/d3/wiki/Selections#wiki-data – Adrian

2

從chumkiu答案爲我工作不錯,但需要一對夫婦的調整的 - 在D3氣泡圖的最新版本,您需要定義根,而不是JSON,因爲在

root = JSON.parse(myjson); 

另外,您當然可以在代碼的其餘部分用「json」代替「root」。 :-)

對於任何有關使用本地數據集的d3節點鏈接樹問題來解答此答案的人來說,此答案對我很有幫助 - 非常感謝此頁上的貢獻者。