2016-09-15 10 views
-1

私はD3でJSONをロードするので、同じように行われ、これによりエラーが発生しないことを認識しています:このブロック内D3を使用してこのJSONデータにアクセスするにはどうすればよいですか?

d3.json("sample_data/unique_items.json", function(json) { 
    // do something 
}); 

、私はその後、json変数を使用してJSONファイルを参照します。

{ 
    "unique_items": [ 
    { 
     "name": "Blah", 
     "items": [ 
     {"id": 1, "note": "blah"}, 
     {"id": 2, "note": "blah blah"}, 
     {"id": 3, "note": "blah blah blah"} 
     ] 
    }, 
    { 
     "name": "Blah2", 
     "items": [ 
     {"id": 1, "note": "blah"}, 
     {"id": 2, "note": "blah blah"}, 
     {"id": 3, "note": "blah blah blah"} 
     ] 
    } 
    ] 
} 

この構造のアイテムにアクセスする方法には苦労しています。例えば、私はテストとしてこれを試しました:

for (var item in json["unique_items"]) { 
    if (json["unique_items"].hasOwnProperty(item)) { 
    console.log(item["name"]); // 'undefined' error on this line 
    } 
} 

上記のようにコメントされた行には、定義されていないエラーが発生します。私は、コンソールでこれを見ると期待する:私はconsole.log(item.name);にその行を変更しようとしたが、それは同じエラーを生成

Blah 
Blah2 

。私は単にconsole.log(item);に変更し、コンソールへの出力は0でした。私はこれを理解していない。

だから私の質問は以下のとおりです。

  1. 私はunique_items内の要素にアクセスするにはどうすればよいですか?
  2. jsonの構造を改善する方法はありますか?

答えて

1

それを解決し、この

for (var key in json["unique_items"]) { 
    var item = json["unique_items"][key]; 
    if (item) { 
    console.log(item["name"]); 
    } 
} 
+0

を試してみてください!私はその後何が起こったのかを見る。最初の反復は配列(0)のインデックス/位置を取得するだけですが、配列内のインデックスによってその項目にアクセスするためにはそれを使用する必要があります。ありがとうございました! – Dan

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...ofで..の代わりに.. of ..の代わりに使用した場合、あなたは正しいアイデアを得ました。 –

関連する問題