2016-07-18 27 views
0

私はD3を使用して米国の地図をレンダリングしています。D3のJSONをロードするとnull値が返されます

Uncaught TypeError: Cannot read property 'features' of null

これは私が使用しているJSONファイルは次のとおりです:私は、JSONファイルをロードしようとすると、しかし、私は、このエラーメッセージが表示されますhttps://github.com/alignedleft/d3-book/blob/master/chapter_12/us-states.json

それは私の他のすべてと同じディレクトリにありますファイル。

// determine width and height 
var w = 500; 
var h = 300; 

// define map projection 
var projection = d3.geoAlbersUsa(); 

// this translates geojson coordinates to svg path codes 
var path = d3.geoPath() 
      .projection(projection); 

// create svg 
var svg = d3.select("body") 
      .append("svg") 
      .attr("width", w) 
      .attr("height", h); 

// load in the geojson file 
d3.json("states.json", function(json) { 
     console.log(json); // <---- comes up as "null" 
     // create one path per geojson feature 
     svg.selectAll("path") 
      .data(json.features) // <---- THIS is where the error is apparently coming from 
      .enter() 
      .append("path") 
      .attr("d", path); 
}); 

いずれの洞察も認められます。ありがとう!

+0

これが大部分のことはわかりませんが、正しく実行されているように見えますか?ステータス:304 - タイプ:xhr - イニシエータ:d3.v4.min.js - サイズ:136 B - 時間:7ms。 [ネットワーク]タブからstates.jsonを選択すると、プレビュータブにJSONが正しく表示されているようです。私が使用している3つのファイル(index.html、states.json、render-map.js)はすべて同じディレクトリにあります。絶対パスを試しても何も変わりませんでした。 –

+2

JSONファイルに無効な文字、つまりマルチバイト文字が含まれているようです。正しいコールバック定義を使用してエラー引数を記録すると、JSONファイルを解析しようとするとエラーメッセージが表示されます。どのようにgithubからJSONファイルを保存しましたか?コピー/貼り付けまたは直接ダウンロード?あなたはそれを再ダウンロードする必要があるかもしれない –

+0

私はgithub Rawコードからメモ帳++にコピー/貼り付けを行いました。直接ダウンロードして再試行し、エラーが発生しなくなりました!それは問題だったようです。ありがとうございました! –

答えて

2

匿名関数の最初の引数は 'error'です。それはのようです

d3.json(filePath, function(err,data){ 
if(err) console.log("error fetching data"); 
// data holds the file content 
}); 

おそらくそれを逃した。チェックhttps://github.com/d3/d3-request/blob/master/README.md#json

+0

お返事ありがとうございます!私はもはやエラーメッセージを受け取っていません(上記のコメントを参照)。私はエラーの引数で少し混乱しています。私が従うチュートリアルでは、それを使用していません:http://chimera.labs.oreilly.com/books/1230000000345/ch12.html#_paths - それはD3 v4の新機能ですか? –

+0

@BenjaminSchroeder、これはオプションの引数です。コールバックに1つの引数が渡された場合はデータ、2つがエラー、データの場合 – Mark

+0

'error'はオプションの引数です。 'd3.json'は1つの引数でうまく動作します。 –

関連する問題