Node.js에서 json-2-csv를 사용하는 방법
Overview
섹션 제목: “Overview”json-2-csv는 Node.js에서 객체 배열을 CSV 문자열로 바꿀 때 간단하게 사용할 수 있는 라이브러리다.
여기서는 json-2-csv의 기본 사용 방법과 자주 쓰는 옵션만 간단히 정리한다.
How to
섹션 제목: “How to”1) 기본 변환
섹션 제목: “1) 기본 변환”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파일을 만들 수 있다.
2) 빈 값을 기본값으로 채우기
섹션 제목: “2) 빈 값을 기본값으로 채우기”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,});4) 헤더 출력 여부 설정하기
섹션 제목: “4) 헤더 출력 여부 설정하기”const csvLine = await json2csvAsync(items, { prependHeader: false,});prependHeader의 기본값은true다.false로 바꾸면name,age같은 헤더 줄 없이 데이터 행만 만든다.
Example
섹션 제목: “Example”1) 기본 변환 결과
섹션 제목: “1) 기본 변환 결과”name,ageJohn,27Jack,63Dan,352) emptyFieldValue 사용 결과
섹션 제목: “2) emptyFieldValue 사용 결과”name,age,height,weightJohn,27,182,83Jack,63,-,83Dan,35,-,-3) expandArrayObjects: true 사용 결과
섹션 제목: “3) expandArrayObjects: true 사용 결과”name,age,hobby.game,hobby.sportJohn,27,-,-Dan,35,"[""LOL"",""OverWatch""]","[""soccer"",""running""]"4) prependHeader: false 사용 결과
섹션 제목: “4) prependHeader: false 사용 결과”John,27Jack,63Dan,35Notes
섹션 제목: “Notes”1) 파일로 저장하기
섹션 제목: “1) 파일로 저장하기”import fs from 'node:fs';
fs.writeFileSync('result.csv', csvLine);2) json2csvAsync() 입력 형태
섹션 제목: “2) json2csvAsync() 입력 형태”- 단순 문자열 배열이나 숫자 배열이 아니라, 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');