如何将CSV转换为Node.js中的JSON

我想转换CSV文件到JSON。 我在用 。

CSV示例:

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

期望的JSON:

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

我试过node-csv分析器库。但是输出像数组不一样。

我正在使用节点0.8和express.js,并希望如何轻松完成此build议。

Node.js csvtojson模块是一个全面的nodejs csvparsing器。 它可以在webpackwebpack帮助下用作node.js应用程序库/命令行工具/浏览器。

源代码可以在https://github.com/Keyang/node-csvtojsonfind

它具有内存消耗低的特点,但function强大,支持任何需要丰富的API和易读的文档的parsing需求。

详细的文档可以在这里find

以下是一些代码示例:

将其用作Node.js应用程序(csvtojson@1.1.0 +)中的库:

  1. 通过npm安装它

npm install --save csvtojson@latest

  1. 在你的node.js应用程序中使用它:
 // require csvtojson var csv = require("csvtojson"); // Convert a csv file with csvtojson csv() .fromFile(csvFilePath) .on("end_parsed",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) .on("json",function(jsonObj){ //single json object will be emitted for each csv line console.log(jsonObj); }) //Convert csv string to csv rows csv() .fromString(csvString) .on("csv",function(row){ // an array of csv cols like [col1, col2, col3 ...] console.log(row); }) 

将其用作命令行工具:

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

对于高级用法:

 sh# csvtojson --help 

你可以从上面的github页面find更多的细节。

你可以尝试使用underscore.js

首先使用toArray函数转换数组中的行:

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

然后使用对象函数将数组一起对象 :

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

那时,json var应该包含如下内容:

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

这是一个不需要单独模块的解决scheme。 但是,这是非常粗糙的,并没有实现太多的error handling。 它也可以使用更多的testing,但它会让你去。 如果您正在parsing非常大的文件,您可能需要寻找替代scheme。 另外,请看Ben Nadel的这个解决scheme 。

节点模块代码,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); }; 

茉莉花testing,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); }); }); 

不得不做类似的事情,希望这有助于。

 // 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);}); 

我开始与node-csvtojson ,但它为我的链接带来了太多的依赖。

基于你的问题和brnd的答案 ,我使用了node-csv和underscore.js 。

 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); }); }); 

使用lodash :

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

我已经使用csvtojson库将csvstring转换为json数组。 它有多种function,可以帮助您转换为JSON。
它还支持从文件和文件stream中读取数据。

分析可以包含逗号(,)或任何其他分隔符的csv时要小心。 要删除分隔符,请在这里看到我的答案。

我和我的好友创build了一个web服务来处理这种事情。

查看Modifly.co ,了解如何使用单个RESTful调用将CSV转换为JSON。

节点ETL包足以用于所有BI处理。

 npm install node-etl; 

然后 :

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

使用csvparsing器库 ,我在这里更详细地解释如何使用它。

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

步骤1:

安装节点模块:npm install csvtojson –save

第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); });