programing

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

testmans 2023. 3. 21. 21:47
반응형

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 모듈은 포괄적인 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 페이지에서 확인할 수 있습니다.

언더스코어.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}

비슷한 일을 해야 했는데 이게 도움이 됐으면 좋겠군

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

여기에서는 별도의 모듈을 필요로 하지 않는 솔루션을 소개합니다.단, 매우 조잡하고 에러 처리를 많이 실시하지 않습니다.그것은 또한 더 많은 테스트를 필요로 할 수도 있지만, 그것은 당신을 계속하게 할 것이다.대용량의 파일을 해석하는 경우는, 다른 방법을 찾을 수 있습니다.또한 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);
    });
});

명령줄 컨버터만 원하는 경우 가장 빠르고 깔끔한 솔루션은 npx를 통해 csvtojson을 사용하는 것입니다(기본값은 node.js에 포함되어 있습니다).

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

ES6 사용

const toJSON = csv => {
    const lines = csv.split('\n')
    const result = []
    const headers = lines[0].split(',')

    lines.map(l => {
        const obj = {}
        const line = l.split(',')

        headers.map((h, i) => {
            obj[h] = line[i]
        })

        result.push(obj)
    })

    return JSON.stringify(result)
}

const csv = `name,email,age
francis,francis@gmail.com,33
matty,mm@gmail.com,29`

const data = toJSON(csv)

console.log(data)

산출량

// [{"name":"name","email":"email","age":"age"},{"name":"francis","email":"francis@gmail.com","age":"33"},{"name":"matty","email":"mm@gmail.com","age":"29"}]

lodash 사용:

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

csv 패키지 https://npmjs.org/package/csv는 사용해 본 적이 없습니다만, 메뉴얼에 의하면, 고품질의 실장이라고 생각됩니다.http://www.adaltas.com/projects/node-csv/

처음에는 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);
        });
     });

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

CSV 문자열을 json 어레이로 변환하기 위해 csvtojson 라이브러리를 사용했습니다.JSON으로의 변환에 도움이 되는 다양한 기능을 갖추고 있습니다.
또한 파일 및 파일 스트리밍에서 읽을 수도 있습니다.

쉼표() 또는 다른 구분 기호를 포함할 수 있는 csv를 구문 분석할 때는 주의하십시오. 구분 기호를 제거하려면 여기를 참조하십시오.

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

모든 BI 처리에 Node-ETL 패키지로 충분합니다.

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

나와 내 친구는 이런 종류의 일을 처리하기 위해 웹 서비스를 만들었다.

단일 RESTful 콜에서 CSV를 JSON으로 변환하는 방법에 대해서는, Modifly.co 를 참조해 주세요.

csv 파서 라이브러리를 사용하세요.사용 방법에 대해서는, 여기를 참조해 주세요.

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

npm install csvjson --save
노드 내 JS 파일

const csvjson = require('csvjson');
convertCSVToJSON(*.csv);

convertCSVToJSON = (file) => {
  const convertedObj = csvjson.toObject(file);
}

csvtojson 모듈은 csv를 json 또는 열 어레이로 변환하는 포괄적인 nodejs csv 파서입니다.node.js 라이브러리 / 명령줄 도구 / 또는 브라우저에서 사용할 수 있습니다.다음은 몇 가지 기능입니다.

/** csv file
a,b,c
1,2,3
4,5,6
*/
const csvFilePath='<path to csv file>'
const csv=require('csvtojson')
csv()
.fromFile(csvFilePath)
.then((jsonObj)=>{
    console.log(jsonObj);
    /**
     * [
     *  {a:"1", b:"2", c:"3"},
     *  {a:"4", b:"5". c:"6"}
     * ]
     */ 
})
 
// Async / await usage
const jsonArray=await csv().fromFile(csvFilePath);

csvtojson 모듈을 설치하고 다음 코드를 사용하여 큰 (315 MB) csv 파일을 json으로 변환했습니다.

const fs = require('fs')
const Converter = require('csvtojson').Converter
const csvConverter = new Converter({
    constructResult:false,
    downstreamFormat:"array",
})

csvConverter.subscribe=function(json,row,index){
    json["rowIndex"]=index
};

const readStream = fs.createReadStream('./data.csv') // my csv file
const writeStream = fs.createWriteStream('./data.json') // my new json file

readStream.pipe(csvConverter).pipe(writeStream)

결과 json 파일은 원하는 형식입니다.

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

CSV 데이터를 2개의 치수 어레이로 구성하는 방법을 파악했습니다.

[['header1','header2'],['data1','data2']]

json으로 변환은 간단히 매핑되고 축소됩니다.

const keys = input[0]
const jsonOutput = input.slice(1)
  .map(arr2 => keys.reduce((accumulator, element, index) => {
    return { ...accumulator,
      [element]: arr2[index]
    };
  }, {}))

제 경우 파일이 너무 커서 JSON.stringify는 도움이 되지 않았습니다.이것으로 내 욕구가 해결되었다.

let csvFile = fs.readFileSync(
  csvFilePath,
  { encoding: "utf-8" },
  function (err) {
    console.log(err);
  }
);
csvFile = csvFile.split("\n");

let strFile = "export default [";
csvFile.forEach(function (d) {
  let row = d.split(",");
  strFile += `[${row}],`;
});
strFile += "]";

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

반응형