2017-02-21 3 views
1

Ein Benutzer drückt eine Schaltfläche und es führt eine SQL-Abfrage zu meiner Datenbank mit NodeJS und das Ergebnis ist ein JSON-Objekt (ein Array mit Objekten). Danach muss das Ergebnis in einer Datei gespeichert werden (der Benutzer benötigt die Datei).JSON-Objekt in CSV konvertieren und in eine Datei speichern

Das Problem: Es kann kein JSON sein. Das Format sind nur die Werte, die durch das Simbol ";" und ein Objekt pro Zeile getrennt sind.

Beispiel für den Inhalt der Datei, die ich erstellen müssen (es wie eine CSV ist):

1;tree;green 
2;car;red 
3;Robert's house;white 

Dieses Ergebnis Abfrage hat rund 18000 Zeilen. Es ist groß.

Ich verwende die Methode ersetzen aber ich habe Probleme mit den Werten mit dem simbol ' wie in Robert Hause, da die Konsole als Anfang eines Strings interpretiert.

Dann in der Client-Seite Ich benutze:

$window.open('data:text/csv,' + encodeURIComponent(myString)); 

Und hier die Simbols ' das Problem starten.

Ich würde gerne wissen, wie man ein JSON in dieses Format (unter NodeJS) transformiert und wie man die Datei erstellt.

+0

Mögliche Duplikat von [Wie konvertiert man JSON in CSV-Format und speichern Sie in einer Variablen] (http: // Stackoverflow .com/questions/8847766/how-to-converter-json-zu-csv-format-und-store-in-a-variable) – Nobita

Antwort

1

Bezeichnen Zeichenfolge mit doppelten Anführungszeichen "und dann können Sie Apostroph verwenden‚in der es zB.

var sql = "SELECT * FROM table WHERE USER='John'"; 

nun zu vermeiden, indem Charakter und damit immer Probleme mit einfachen Anführungszeichen zu lesen Zeichen‘, Verwendung .split (";") Methode, die Ihre Zeile zuerst in einzelne Wörter teilt, die Sie dann den Spalten in CSV zuweisen können

EDIT: Ich schrieb einen Code, der eine .json-Datei liest (Sie erhalten es aus der Datenbank , die gleiche Sache) und es gibt csv Datei aus

var fs = require('fs'); 
var obj = JSON.parse(fs.readFileSync("data.json", "utf-8")); 
var stream = fs.createWriteStream("data.csv"); 

stream.once('open', function(fd){ 
    for (var i = 0; i < obj.person.length; i++) { 
     var string = obj.person[i].id + ";" + obj.person[i].name + ";" + obj.person[i].age + "\n"; 
     stream.write(string); 
    } 
    stream.end(); 
}); 

Sie können dann tun, was Sie wollen mit CSV-Datei.

EDIT: Wie gefragt, hier ist, wie ich Datei in einem meiner Projekte senden:

router.get('/download/:name', function (req, res, next) { 
    var file = './public/data/' + req.params.name; //file is saved in /public/data first 
    var filename = path.basename(file); 
    var mimetype = mime.lookup(file); 
    res.setHeader('Content-disposition', 'attachment; filename=' + filename); 
    res.setHeader('Content-type', mimetype); 

    var filestream = fs.createReadStream(file); 
    filestream.pipe(res); 
}); 
+0

Es wird auf der Serverseite ausgeführt. Wie kann ich die CVS-Datei an den Kunden senden? –

+0

Entschuldigung für die späte Antwort, ich habe meine Antwort basierend auf Ihrer Frage bearbeitet –

Verwandte Themen