Development Tip

Node.js에서 CSV를 JSON으로 변환하는 방법

yourdevel 2021. 1. 10. 19:39
반응형

Node.js에서 CSV를 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 파서 라이브러리를 시도했지만 출력은 예상과 다른 배열과 같습니다.

Node 0.8과 express.js를 사용하고 있으며이를 쉽게 수행하는 방법에 대한 권장 사항을 원합니다.


Node.js csvtojson모듈 은 포괄적 인 nodejs csv 파서입니다. 그것은 Node.js를 응용 프로그램 라이브러리 /의 도움으로 명령 줄 도구 / 또는 브라우저로 사용할 수 있습니다 browserify또는 webpack.

소스 코드는 https://github.com/Keyang/node-csvtojson 에서 찾을 수 있습니다.

적은 메모리 소비로 빠르지 만 풍부한 API와 읽기 쉬운 문서로 모든 구문 분석 요구를 지원할 수 있습니다.

자세한 문서는 여기 에서 찾을 수 있습니다 .

다음은 몇 가지 코드 예입니다.

Node.js 애플리케이션 (csvtojson@2.0.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)
  .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);

명령 줄 도구로 사용 :

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

-또는-

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

고급 사용 :

sh# csvtojson --help

위의 github 페이지에서 자세한 내용을 확인할 수 있습니다.


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}

별도의 모듈이 필요없는 솔루션입니다. 그러나 매우 조잡하고 많은 오류 처리를 구현하지 않습니다. 또한 더 많은 테스트를 사용할 수 있지만 진행할 수 있습니다. 매우 큰 파일을 구문 분석하는 경우 대안을 찾을 수 있습니다. 또한 Ben Nadel 의이 솔루션을 참조하십시오 .

노드 모듈 코드, 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 테스트, 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);});

나는 csv 패키지 https://npmjs.org/package/csv를 시도하지 않았지만 문서에 따르면 품질 구현 http://www.adaltas.com/projects/node-csv/


node-csvtojson으로 시작 했지만 연결에 너무 많은 종속성을 가져 왔습니다.

질문과에 구축 brnd 의해 답변 , 내가 사용하는 노드-CSVunderscore.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(','));
  });
}

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

csvtojson 모듈을 사용하여 콘솔의 csv에서 json을 인쇄하는 매우 간단한 솔루션이 있습니다.

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

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

I have used csvtojson library for converting csv string to json array. It has variety of function which can help you to convert to JSON.
It also supports reading from file and file streaming.

Be careful while parsing the csv which can contain the comma(,) or any other delimiter . For removing the delimiter please see my answer here.


If you want just a command line converter, the quickest and most clean solution for me is to use csvtojson via npx (included by default in node.js)

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


Me and my buddy created a web service to handle this kind of thing.

Check out Modifly.co for instructions on how to transform CSV to JSON with a single RESTful call.


Use csv parser library, I'm explaining in more details how to use it here .

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

Step 1:

Install node module: npm install csvtojson --save

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

ReferenceURL : https://stackoverflow.com/questions/16831250/how-to-convert-csv-to-json-in-node-js

반응형