64

私はd3を学んでいます。d3jsにデータをロードする特定の方法があります。しかし、それらはすべてHTTPGETを作成しているようです。私のシナリオでは、すでに文字列にjsonデータがあります。別のhttpリクエストを行う代わりに、この文字列を使用するにはどうすればよいですか?このためのドキュメントを探しましたが、見つかりませんでした。

これは機能します:

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」を使用してサーバーへの非同期呼び出しを回避するにはどうすればよいですか?ありがとう。

4

3 に答える 3

83

d3.json通話を次のように置き換えるだけです

json = JSON.parse( myjson );

IE:

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

2013年9月更新

元のコードが変更されました。したがって、varnamejsonは次のようになりますroot

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

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

    //rendering logic here

//} #delete this line
于 2012-06-07T15:34:12.723 に答える
3

chumkiu からの回答は私にとってはうまくいきましたが、いくつかの調整が必要でした.d3 バブル チャートの最新バージョンでは、次のように json ではなくルートを定義する必要があります。

 root = JSON.parse( myjson );

もちろん、残りのコードで「root」を「json」に置き換えることもできます。:-)

ローカル データ セットを利用する d3 ノード リンク ツリーに関する質問でこの回答にたどり着いた人にとって、この回答は私にとって非常に役に立ちました。このページの寄稿者に感謝します。

于 2013-07-09T15:57:12.050 に答える
2

この例によると:

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

ここでは、変数 $data 内にグラフ データを格納し、.data($data) 関数を介して設定しています。

この方法は、使用しているグラフに適用します。

于 2012-06-07T15:49:49.047 に答える