2016-04-01 13 views
0

Hier ist mein Code:Warum schreibt das nicht jedes Element in eine Datei?

var data = require('./campSample.json'); 
var dataArray = data.resultset.result; 
var fs = require('fs'); 


for(var i = 0; i < dataArray.length; i++){ 
    fs.writeFile("./campList", dataArray[i]["-facilityName"], function (err) { 
     if(err){ 
      return console.log(err); 
     } 
    }); 
} 

Ich versuche, die for-Schleife, um durch jedes Element im Array zu gehen, den facilityName zu bekommen, und die facilityName in eine Datei zu schreiben. Wenn ich den obigen Code ausführe, schreibe ich nur den facilityName des ersten Elements in das Array. Gibt es einen besseren Weg, dies zu tun? Der campSample.json, mit dem ich arbeite, ist nur ein Beispiel. Das eigentliche Array, das ich verwenden möchte, enthält ungefähr 4000 Elemente. Hier ist der Inhalt von campSample.json:

{ 
    "resultset": { 
    "-count": "4904", 
    "-resultType": "campgrounds", 
    "result": [ 
     { 
     "-availabilityStatus": "N", 
     "-contractID": "GA", 
     "-contractType": "STATE", 
     "-facilityID": "530145", 
     "-facilityName": "A. H. STEPHENS STATE HISTORIC PARK", 
     "-faciltyPhoto": "/webphotos/GA/pid530145/0/80x53.jpg", 
     "-latitude": "33.5633333", 
     "-longitude": "-82.8966667", 
     "-shortName": "C145", 
     "-sitesWithAmps": "Y", 
     "-sitesWithPetsAllowed": "Y", 
     "-sitesWithSewerHookup": "N", 
     "-sitesWithWaterHookup": "Y", 
     "-state": "GA" 
     }, 
     { 
     "-availabilityStatus": "N", 
     "-contractID": "OH", 
     "-contractType": "STATE", 
     "-facilityID": "960023", 
     "-facilityName": "A.W. MARION STATE PARK", 
     "-faciltyPhoto": "/webphotos/OH/pid960023/0/80x53.jpg", 
     "-latitude": "39.6336111", 
     "-longitude": "-82.8747222", 
     "-shortName": "P023", 
     "-sitesWithAmps": "Y", 
     "-sitesWithPetsAllowed": "Y", 
     "-sitesWithSewerHookup": "N", 
     "-sitesWithWaterHookup": "N", 
     "-state": "OH" 
     }, 
     { 
     "-availabilityStatus": "N", 
     "-contractID": "NRSO", 
     "-contractType": "FEDERAL", 
     "-facilityID": "72346", 
     "-facilityName": "ACKER ROCK LOOKOUT", 
     "-faciltyPhoto": "/webphotos/NRSO/pid72346/0/80x53.jpg", 
     "-latitude": "43.0523056", 
     "-longitude": "-122.6456111", 
     "-shortName": "ARCL", 
     "-sitesWithAmps": "N", 
     "-sitesWithPetsAllowed": "Y", 
     "-sitesWithSewerHookup": "N", 
     "-sitesWithWaterHookup": "N", 
     "-state": "OR" 
     } 
    ] 
    } 
} 
+0

Können Sie uns das erwartete Ergebnis in dieser Datei anzeigen "" ./campList "'? – Lewis

+0

Wie wäre es, 'string' und' fs.writeFile' nur einmal zu verketten? – Rayon

+0

Für das obige json-Beispiel ist die erwartete Ausgabe wie folgt: A. H. STEPHENS STATE HISTORISCHER PARK A.W. MARION STATE PARK ACKER ROCK LOOKOUTTE HISTORISCHER PARK Aber jetzt, da ich die Reihenfolge sehe, ist der aktuelle Code tatsächlich nur schreiben die FacilityName des dritten Elements, Acker Rock ... – Impulso

Antwort

0

Von Ihrem Kommentar, müssen Sie den Inhalt anhängen Datei, so folgenden Code wird

var data = require('./campSample.json'); 
var dataArray = data.resultset.result; 
var fs = require('fs'); 

for(var i = 0; i < dataArray.length; i++){ 
    fs.appendFile("./campList", dataArray[i]["-facilityName"]+'\r\n', function (err) { 
     if(err){ 
      return console.log(err); 
     } 
    }); 
} 
+0

Ah ha! Das hat für mich funktioniert. Vielen Dank für Ihre Hilfe. Die for-Schleife schreibt jetzt die facilityNames in eine neue Datei im Listenformat. Vielen Dank! – Impulso

1

Von writeFile docs:

Beachten Sie, dass es unsicher ist, fs.writeFile mehrere Male auf der gleichen Datei zu verwenden, ohne auf den Rückruf zu warten. Für dieses Szenario wird fs.createWriteStream stark

Zusätzlich empfehlenswert:

Asynchron schreibt Daten in eine Datei, um die Datei zu ersetzen, wenn es bereits vorhanden ist.

+0

createWriteStream gibt einen Fehler, Unbekannte Codierung: a. h. Stephens State Historic Park – Impulso

2

Sie arbeiten sollten vorher alle Namen sammeln, schreiben dann alle, deren Name in ./campList mit nur einem einzigen IO Anfrage.

var names = dataArray.map(function(result) { 
    return result["-facilityName"]; 
}).join('\n'); 
fs.writeFile("./campList", names, function(err) { 
    if (err) { 
    return console.log(err); 
    } 
}); 
+0

Dies scheint ein viel besserer Weg zu sein als Anhängen und Iterieren, aus mehreren Gründen. –

+0

Stimmen Sie vollständig +1 zu – JagsSparrow

Verwandte Themen