2016-04-12 4 views
3

Ich versuche, die unter CSV-Daten in ein JSON-Objekt-Array zu konvertieren,NodeJS - Konvertieren von CSV zu JSON-Objekt Array

CSV formatted data: apples,oranges,grapes,peach,pineapple 

JSON Object Array: { 
        fruits: [ 
         { 
          "name": "apples" 
         }, 
         { 
          "name": "oranges" 
         }, 
         { 
          "name": "grapes" 
         }, 
         { 
          "name": "peach" 
         }, 
         { 
          "name": "pineapple" 
         } 
        ] 
        } 

ich dieses NPM-Paket bezeichnet https://www.npmjs.com/package/csvtojson und diesen mit Strom-Parser https://github.com/nicolashery/example-stream-parser, aber Ich bin mir nicht sicher, wie das zu meinem Bedürfnis passt.

Kann jemand vorschlagen, eine Möglichkeit zum Konvertieren dieser CSV-Daten in ein JSON-Objekt-Array in dem Format, das gebucht wurde.

Lösung für die obige Abfrage (siehe den untenstehenden Abschnitt Kommentare für weitere Details),

var res = {}; 

res.fruits = 'apples|1,oranges|2,grapes|3,peach|4,pineapple|5' 
.split(',').map(function (fruit) { //as did by @Dmitriy Simushev in the below reply 
    return { 
     "name": fruit.split('|')[0], 
     "value": fruit.split('|')[1] 
    } 
}); 

document.write('<pre>' + JSON.stringify(res, 0, 2) + '</pre>'); 
+1

Das von Ihnen angezeigte Format ist nicht csv. In csv stellen Kommata getrennte Felder/Eigenschaften und Zeilen für Datensätze/Objekte dar. –

Antwort

1

Sie können einfaches JavaScript mitverwendenund map Funktionen

var res = {}; 
 

 
res.fruits = 'apples|1,oranges|2,grapes|3,peach|4,pineapple|5' 
 
    .split(',').map(e => ({ 
 
     "name": e.split('|')[0], 
 
     "value": e.split('|')[1] 
 
    })); 
 

 
document.write('<pre>' + JSON.stringify(res, 0, 2) + '</pre>');

+0

mit Plain Split und Map funktioniert wirklich gut, vor allem mit der => ECMA-Syntax (nicht ganz sicher, was es heißt, ist es Arrow Funktionen?), So wie ich sagte, das ist ziemlich glatt und sauber .. nur was ist, wenn ich das habe CSV-Daten wie diese 'Äpfel | 1, Orangen | 2, Trauben | 3, Pfirsich | 4, Ananas | 5' und das resultierende JSON sollte ungefähr so ​​aussehen, – Sai

+0

{ Früchte: [ { "Name": "Äpfel “ "Wert": "1" }, { "name": "Orangen" "Wert": "2" }, { "name": "Trauben" "value" : "3" } .... ] } – Sai

+0

@Sai siehe Update – isvforall

1

Schnell String.prototype.split mit Array.prototype.map kombinieren kann, das Ziel zu erreichen. Hier

ist ein Beispiel dafür, wie es getan werden könnte:

var data = "apples,oranges,grapes,peach,pineapple"; 

// Wrap fruits names with object, 
var fruits = data.split(',').map(function(fruit) { 
    return {name: fruit} 
}); 

// Wrap fruits set with outer object. 
var json = {fruits: fruits}; 

// Show the result. 
console.dir(json); 
+0

die Daten ("Äpfel, Orangen, Trauben, Pfirsich, Ananas") ich projiziert ist nur ein Beispiel, tatsächlich in der Anwendung werde ich etwa 1100 Werte mit Komma getrennt bekommen ... denken Sie, dass Split und Karte Ansatz wäre funktioniert sogar in diesem Fall, ohne den Speicher zu beeinträchtigen. – Sai

+0

Tatsächlich speichert der resultierende JSON _alle Ihre Daten_. Also wirst du diese Erinnerung trotzdem benutzen. Außerdem sind 1100 Werte ein relativ kleines Datenpaket. –

1

var csv_data = 'apples,oranges,grapes,peach,pineapple'; 
 
var csv_array = csv_data.split(','); 
 
var object = {}; 
 
var arr = []; 
 
for(var i=0; i<csv_array.length; i++){ 
 
    arr.push({name:csv_array[i]}); 
 
} 
 
object['fruits'] = arr; 
 
console.log(object);

0

Wie in den docs gezeigt, können Sie Ihre CSV-Datei umwandeln wie dies

var Converter = require("csvtojson").Converter; 
var converter = new Converter({}); 
converter.fromFile("./yourCSVfile.csv", function(err, result){ 
    // do something with "result", it's json 
}); 
0

Jede Antwort so weit nicht reflektiert, dass Ihre Daten in einer Datei gespeichert wird. Und ich denke, das ist es wonach Sie suchen. Sie können einfache Node.js-Streams verwenden, um dies zu erreichen:

var fs = require('fs'); 
var es = require('event-stream'); 

fs.createReadStream('data.csv') 
.pipe(es.split()) 
.on('data', (row) => { 
    console.log({ 
    fruits: row.toString().split(',').map((fruit) => { 
     return { 
     name: fruit.trim() 
     } 
    }) 
    }); 
}); 

Sie benötigen npm install event-stream Event-Stream zu installieren.