2016-07-22 11 views
0

外部JSONファイルのロードからローカルjson文字列への移行に問題があります。最初は、d3.json()が$ .getJSON()の内部でJSON.parse()を使用していたのと同じJSON配列を返したようですが、同様のように見えますが、d3.jsonが " ID "変数をJSONデータに追加します。 Sankey Graph in D3を構築するときにはかなり重要なようです。また、$ .getJSON()とJSON.parse()を使用して正確に同じデータを使用すると、このID要素はまったく同じ出力呼び出しに存在しません。 D3は意図的にデータに「ID」要素を追加しますか? JSON.parse()で同じ結果を得るにはどうすればよいですか?d3.json()とJSON.parse()は同じ結果を生成しますか?

ので、視覚的に、にconsole.log(mygraph)呼び出しの出力は次のように表示されます:

Object {source: Object, target: Object, value: "0", path: "path#0", dy: 0} 
    dy:0 
    id:0 
    path:"path#3" 
    source:Object 
    sy:0 
    target:Object 
    ty:0 
    value:"0" 
    __proto__:Object 

しかし、にconsole.log(mygraph)コールで後者の方法は次のように表示されます:

Object {source: Object, target: Object, value: "0", path: "path#0", dy: 0} 
    dy:0 
    path:"path#3" 
    source:Object 
    sy:0 
    target:Object 
    ty:0 
    value:"0" 
    __proto__:Object 

この「ID」は正確に何であり、後者の方法を使って取得するにはどうすればよいですか?実際には、ローカルJSON変数をD3にロードするにはどうすればよいですか?

+0

'd3.json'はレスポンスに' id'属性を追加しません。実際はコードは基本的に 'return JSON.parse(xhr.responseText);' – reptilicus

+0

@RuuRuuです。これをまだ認識していますが、StackOverflowでは、人々があなたの質問に答えるのに時間がかかるとき、そして答えが満足できるものなら、それを受け入れるか(答えの隣にあるチェックマークをクリックして)、それをupvoteします。あなたはそれをやったことがないようです。 – meetamit

+0

いい考えはありませんでした。知らせてくれてありがとうございます! –

答えて

1

d3.json()は、$.getJSON()のように、1番目のパラメータとしてURL文字列を取り、2番目のパラメータとしてデータを読み込むときに呼び出される関数を使用します。

JSON.parse()他にもあります。それはJSONのように見える文字列を受け取り、それをjsonのようなjavascriptオブジェクトに解析します。

どちらも、生成するデータにidのようなものを追加しません。 idはロード/解析中のデータになければなりません。

idを生成した可能性があることの1つは、データを正常に読み込んだ/解析した後に、id propを追加した別の関数に渡したことです。その場合、Chromeのconsole.logの方法で混乱したことが原因で、ログしたオブジェクトを拡張することができます。事は、あなたがidを追加する前に、console.logがあなたのオブジェクトを編集したとしても、それをクリックして拡大表示すると、すでにそこにあり、表示されていました。

関連する問題