it-swarm.com.de

So konvertieren Sie CSV in JSON in Node.js

Ich versuche, CSV-Datei in JSON zu konvertieren. Ich benutze .

Beispiel CSV:

a,b,c,d
1,2,3,4
5,6,7,8
...

Gewünschter JSON:

{"a": 1,"b": 2,"c": 3,"d": 4},
{"a": 5,"b": 6,"c": 7,"d": 8},
...

Ich habe versucht, Node-CSV-Parser-Bibliothek. Aber die Ausgabe ist wie Array nicht wie ich erwartet hatte.

Ich verwende Node 0.8 und express.js und möchte eine Empfehlung, wie dies einfach zu erreichen ist.

54
Jetson John

Node.js csvtojson module ist ein umfassender nodejs-csv-Parser. Es kann als node.js-App-Bibliothek, als Befehlszeilen-Tool oder als Browser mit Hilfe von browserify oder webpack verwendet werden.

der Quellcode ist zu finden unter: https://github.com/Keyang/node-csvtojson

Es ist schnell mit geringem Speicherverbrauch und dennoch leistungsstark, um alle Parsing-Anforderungen mit reichlich vorhandener API und einfach zu lesender Dokumentation zu erfüllen.

Die ausführliche Dokumentation finden Sie hier

Hier sind einige Codebeispiele:

Verwenden Sie es als Bibliothek in Ihrer Node.js-Anwendung ([email protected] +):

  1. Installiere es über npm

npm install --save [email protected]

  1. Verwenden Sie es in Ihrer node.js-App:
// require csvtojson
var csv = require("csvtojson");

// Convert a csv file with csvtojson
csv()
  .fromFile(csvFilePath)
  .then(function(jsonArrayObj){ //when parse finished, result will be emitted here.
     console.log(jsonArrayObj); 
   })

// Parse large csv with stream / pipe (low mem consumption)
csv()
  .fromStream(readableStream)
  .subscribe(function(jsonObj){ //single json object will be emitted for each csv line
     // parse each json asynchronousely
     return new Promise(function(resolve,reject){
         asyncStoreToDb(json,function(){resolve()})
     })
  }) 

//Use async / await
const jsonArray=await csv().fromFile(filePath);

Verwenden Sie es als Befehlszeilentool:

sh# npm install csvtojson
sh# ./node_modules/csvtojson/bin/csvtojson ./youCsvFile.csv

-oder-

sh# npm install -g csvtojson
sh# csvtojson ./yourCsvFile.csv

Für fortgeschrittene Nutzung:

sh# csvtojson --help

Weitere Details finden Sie oben auf der Github-Seite.

71
Keyang

Sie können versuchen, nderscore.js zu verwenden

Konvertieren Sie zuerst die Zeilen in Arrays mit der Funktion toArray :

var letters = _.toArray(a,b,c,d);
var numbers = _.toArray(1,2,3,4);

Wenden Sie dann die Arrays mit der Funktion object zusammen an:

var json = _.object(letters, numbers);

Bis dahin sollte die json var etwa enthalten:

{"a": 1,"b": 2,"c": 3,"d": 4}
19
brnrd

Hier ist eine Lösung, die kein separates Modul erfordert. Es ist jedoch sehr grob und implementiert nicht viel Fehlerbehandlung. Es könnte auch mehr Tests gebrauchen, aber es wird Sie in Schwung bringen. Wenn Sie sehr große Dateien analysieren, möchten Sie möglicherweise eine Alternative suchen. Siehe auch diese Lösung von Ben Nadel .

Knotenmodulcode, csv2json.js:

/*
 * Convert a CSV String to JSON
 */
exports.convert = function(csvString) {
    var json = [];
    var csvArray = csvString.split("\n");

    // Remove the column names from csvArray into csvColumns.
    // Also replace single quote with double quote (JSON needs double).
    var csvColumns = JSON
            .parse("[" + csvArray.shift().replace(/'/g, '"') + "]");

    csvArray.forEach(function(csvRowString) {

        var csvRow = csvRowString.split(",");

        // Here we work on a single row.
        // Create an object with all of the csvColumns as keys.
        jsonRow = new Object();
        for ( var colNum = 0; colNum < csvRow.length; colNum++) {
            // Remove beginning and ending quotes since stringify will add them.
            var colData = csvRow[colNum].replace(/^['"]|['"]$/g, "");
            jsonRow[csvColumns[colNum]] = colData;
        }
        json.Push(jsonRow);
    });

    return JSON.stringify(json);
};

Jasmine Test, csv2jsonSpec.js:

var csv2json = require('csv2json.js');

var CSV_STRING = "'col1','col2','col3'\n'1','2','3'\n'4','5','6'";
var JSON_STRING = '[{"col1":"1","col2":"2","col3":"3"},{"col1":"4","col2":"5","col3":"6"}]';

/* jasmine specs for csv2json */
describe('csv2json', function() {

    it('should convert a csv string to a json string.', function() {
        expect(csv2json.convert(CSV_STRING)).toEqual(
                JSON_STRING);
    });
});
11
Jess

Musste etwas ähnliches machen, hoffe das hilft.

// Node packages for file system
var fs = require('fs');
var path = require('path');


var filePath = path.join(__dirname, 'PATH_TO_CSV');
// Read CSV
var f = fs.readFileSync(filePath, {encoding: 'utf-8'}, 
    function(err){console.log(err);});

// Split on row
f = f.split("\n");

// Get first row for column headers
headers = f.shift().split(",");

var json = [];    
f.forEach(function(d){
    // Loop through each row
    tmp = {}
    row = d.split(",")
    for(var i = 0; i < headers.length; i++){
        tmp[headers[i]] = row[i];
    }
    // Add object to list
    json.Push(tmp);
});

var outPath = path.join(__dirname, 'PATH_TO_JSON');
// Convert object to string, write json to file
fs.writeFileSync(outPath, JSON.stringify(json), 'utf8', 
    function(err){console.log(err);});
10
userFog

Ich habe mit node-csvtojson begonnen, aber es hat zu viele Abhängigkeiten für meine Verknüpfung gebracht.

Aufbauend auf Ihrer Frage und dem answer by brnd habe ich node-csv und nderscore.js verwendet.

var attribs;
var json:
csv()
    .from.string(csvString)
    .transform(function(row) {
        if (!attribs) {
            attribs = row;
            return null;
        }
        return row;
     })
    .to.array(function(rows) {
        json = _.map(rows, function(row) {
            return _.object(attribs, row);
        });
     });
3
xverges

Ich habe csv package https://npmjs.org/package/csv nicht ausprobiert, aber laut Dokumentation sieht es nach einer Qualitätsimplementierung aus http://www.adaltas.com/projects/node) -csv /

3

Ich habe eine sehr einfache Lösung, um nur json aus csv auf der Konsole mit dem Modul csvtojson zu drucken.

// require csvtojson
var csv = require("csvtojson");

const csvFilePath='customer-data.csv' //file path of csv
csv()
.fromFile(csvFilePath)``
.then((jsonObj)=>{
    console.log(jsonObj);
})
2

Node-ETL Paket reicht für die gesamte BI-Verarbeitung aus.

npm install node-etl; 

Dann :

var ETL=require('node-etl');
var output=ETL.extract('./data.csv',{
              headers:["a","b","c","d"],
              ignore:(line,index)=>index!==0, //ignore first line
 });
2
Abdennour TOUMI

Mit lodash :

function csvToJson(csv) {
  const content = csv.split('\n');
  const header = content[0].split(',');
  return _.tail(content).map((row) => {
    return _.zipObject(header, row.split(','));
  });
}
2
theseadroid

Ich habe csvtojson Bibliothek zum Konvertieren von CSV-Zeichenfolgen in JSON-Arrays verwendet. Es hat eine Vielzahl von Funktionen, die Ihnen bei der Konvertierung in JSON helfen können.
Es unterstützt auch das Lesen von Dateien und das Streamen von Dateien.

Seien Sie vorsichtig, wenn Sie die CSV-Datei analysieren, die das Komma (,) oder ein anderes Trennzeichen enthalten kann. Um das Trennzeichen zu entfernen, lesen Sie bitte meine Antwort hier .

1
Supermacy

Wenn Sie nur einen Befehlszeilen-Konverter benötigen, ist die schnellste und sauberste Lösung für mich die Verwendung von csvtojson über npx (standardmäßig in node.js enthalten).

$ npx csvtojson ./data.csv > data.json

1
VanDavv

Schritt 1:

Installieren Sie das Knotenmodul: npm install csvtojson --save

Schritt 2:

var Converter = require("csvtojson").Converter;

var converter = new Converter({});

converter.fromFile("./path-to-your-file.csv",function(err,result){

    if(err){
        console.log("Error");
        console.log(err);  
    } 
    var data = result;

    //to check json
    console.log(data);
});
0
Mohamed Sameer

Verwenden Sie csv-Parser-Bibliothek , ich erkläre genauer, wie es verwendet wird hier .

var csv = require('csv');
csv.parse(csvText, {columns: true}, function(err, data){
    console.log(JSON.stringify(data, null, 2));
});
0
ganqqwerty

Mein Kumpel und ich haben einen Webservice erstellt, der sich um solche Dinge kümmert.

Lesen Sie Modifly.co , um Anweisungen zum Umwandeln von CSV in JSON mit einem einzelnen RESTful-Aufruf zu erhalten.

0
Tim Alexander