2016-07-18 7 views
0

Ich benutze D3, um eine Karte der Vereinigten Staaten zu rendern. Wenn ich versuche, die JSON-Datei zu laden, jedoch erhalte ich diese Fehlermeldung:Loading JSON in D3 gibt Nullwert

Uncaught TypeError: Cannot read property 'features' of null

Dies ist die JSON-Datei Ich verwende: https://github.com/alignedleft/d3-book/blob/master/chapter_12/us-states.json

Es ist im selben Verzeichnis wie alle meine anderen gelegen ist Dateien.

// 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); 
}); 

Jeder Einblick würde geschätzt werden. Vielen Dank!

+0

Nicht sicher, was das meiste davon bedeutet, aber es sieht aus wie es richtig geht? Status: 304 - Typ: xhr - Initiator: d3.v4.min.js - Größe: 136 B - Zeit: 7ms. Wenn ich states.json auf der Registerkarte "Netzwerk" auswähle, scheint die Registerkarte "Vorschau" den JSON korrekt anzuzeigen. Alle drei Dateien, die ich verwende - index.html, states.json und render-map.js - befinden sich im selben Verzeichnis. Der Versuch, einen absoluten Pfad zu wählen, hat nichts verändert. –

+2

Es sieht so aus, als ob Ihre JSON-Datei ungültige Zeichen enthält, dh Multibyte-Zeichen. Wenn Sie die richtige Callback-Definition verwenden und das Fehlerargument protokollieren, erhalten Sie eine Fehlermeldung darüber, dass versucht wird, die JSON-Datei zu analysieren. Wie hast du die JSON-Datei von GitHub gespeichert? Kopieren/Einfügen oder direkt herunterladen? Sie müssen es möglicherweise erneut herunterladen –

+0

Ich habe eine Kopie/Einfügen aus dem Github-Raw-Code in Notepad ++. Habe es mit direktem Download erneut getestet und erhalte den Fehler nicht mehr! Das scheint das Problem gewesen zu sein. Vielen Dank! –

Antwort

2

Das erste Argument in der anonymen Funktion ist "Fehler". Es ist wie

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

Vermutlich hast du das verpasst. Überprüfen Sie https://github.com/d3/d3-request/blob/master/README.md#json

+0

Danke für die Antwort! Ich erhalte die Fehlermeldung nicht mehr (siehe obige Kommentare). Ich bin ein wenig verwirrt durch das Fehlerargument. Das folgende Tutorial verwendet das nicht: http://chimera.labs.oreilly.com/books/1230000000345/ch12.html#_paths - Ist das etwas Neues mit D3 v4? –

+0

@ BenjaminSchroeder, es ist ein optionales Argument. Wenn der Callback ein Argument übergeben wird, sind es Daten, zwei sind Fehler, Daten – Mark

+0

'Fehler' ist ein optionales Argument. 'd3.json' funktioniert nur mit 1 Argument. –

Verwandte Themen