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.
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
Verwenden Sie es als Bibliothek in Ihrer Node.js-Anwendung ([email protected] +):
npm
npm install --save [email protected]
// 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.
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}
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 .
/*
* 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);
};
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);
});
});
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);});
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);
});
});
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 /
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);
})
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
});
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(','));
});
}
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 .
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);
});
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));
});
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.