콘텐츠로 이동

Node.js에서 json-2-csv를 사용하는 방법

등록일

수정일

json-2-csv는 Node.js에서 객체 배열을 CSV 문자열로 바꿀 때 간단하게 사용할 수 있는 라이브러리다.

여기서는 json-2-csv의 기본 사용 방법과 자주 쓰는 옵션만 간단히 정리한다.

import { json2csvAsync } from 'json-2-csv';
const items = [
{ name: 'John', age: 27 },
{ name: 'Jack', age: 63 },
{ name: 'Dan', age: 35 },
];
const csvLine = await json2csvAsync(items);
  • 여기서는 json2csvAsync()객체 배열을 넣는 기준으로 설명한다.
  • 필요하면 이 문자열을 파일로 저장해 .csv 파일을 만들 수 있다.
const items = [
{ name: 'John', age: 27, height: 182, weight: 83 },
{ name: 'Jack', age: 63, weight: 83 },
{ name: 'Dan', age: 35 },
];
const csvLine = await json2csvAsync(items, {
emptyFieldValue: '-',
});

3) 배열 객체를 펼쳐서 헤더 만들기

섹션 제목: “3) 배열 객체를 펼쳐서 헤더 만들기”
const items = [
{ name: 'John', age: 27 },
{
name: 'Dan',
age: 35,
hobby: [{ game: ['LOL', 'OverWatch'] }, { sport: ['soccer', 'running'] }],
},
];
const csvLine = await json2csvAsync(items, {
emptyFieldValue: '-',
expandArrayObjects: true,
});
const csvLine = await json2csvAsync(items, {
prependHeader: false,
});
  • prependHeader의 기본값은 true다.
  • false로 바꾸면 name,age 같은 헤더 줄 없이 데이터 행만 만든다.
name,age
John,27
Jack,63
Dan,35
name,age,height,weight
John,27,182,83
Jack,63,-,83
Dan,35,-,-
name,age,hobby.game,hobby.sport
John,27,-,-
Dan,35,"[""LOL"",""OverWatch""]","[""soccer"",""running""]"
John,27
Jack,63
Dan,35

import fs from 'node:fs';
fs.writeFileSync('result.csv', csvLine);
  • 단순 문자열 배열이나 숫자 배열이 아니라, CSV 헤더를 만들 수 있는 객체 배열을 넣는 편이 일반적이다.

3) json-2-csv 없이 직접 만들 수도 있다

섹션 제목: “3) json-2-csv 없이 직접 만들 수도 있다”
  • 구조가 단순하다면 map()join('\n')만으로 직접 CSV 문자열을 만들 수도 있다.
  • 하지만 헤더 처리, 빈 값 처리, 중첩 객체 처리가 필요하면 라이브러리를 쓰는 편이 편하다.
const items = [
{ name: 'John', age: 27 },
{ name: 'Jack', age: 63 },
{ name: 'Dan', age: 35 },
];
const header = ['name', 'age'].join(',');
const rows = items.map((item) => `${item.name},${item.age}`);
const csvLine = [header, ...rows].join('\n');