CSV(쉼표로 구분된 값)와 JSON(JavaScript 객체 표기법)은 가장 널리 사용되는 데이터 교환 형식입니다. CSV는 최소한의 오버헤드로 테이블 데이터에 뛰어나며, JSON은 계층적이고 중첩된 데이터를 쉽게 처리합니다.
왜 CSV를 JSON으로 변환하나요?
CSV 파일은 스프레드시트, 데이터베이스, 로그에서 생성하기 쉽고 간결합니다. 하지만 CSV에는 중요한 한계가 있습니다: 타입 표준이 없고(모두 문자열), 중첩 구조를 지원하지 않으며, 특수 문자 처리가 모호합니다.
일반적인 시나리오에는 스프레드시트 데이터를 웹 애플리케이션으로 마이그레이션, API 사용을 위한 데이터베이스 내보내기 변환, D3.js나 Chart.js와 같은 시각화 라이브러리용 데이터 전처리가 포함됩니다.
기본 변환
가장 단순한 CSV에서 JSON으로의 변환은 첫 번째 행을 헤더로 취급합니다:
이름,나이,도시Alice,30,서울Bob,25,부산다음으로 변환됩니다:
[ { "이름": "Alice", "나이": 30, "도시": "서울" }, { "이름": "Bob", "나이": 25, "도시": "부산" }]나이가 문자열이 아닌 숫자인 것을 확인하세요. CSV에는 타입 정보가 없으므로 좋은 변환기는 변환 중에 타입을 추론해야 합니다. CSV to JSON Converter가 이를 자동으로 처리합니다.
구분 기호 처리
쉼표는 기본 구분 기호이지만 CSV 파일은 세미콜론, 탭, 파이프를 자주 사용합니다 — 특히 쉼표가 소수점 구분 기호인 유럽 로케일에서는.
- 사용자 지정 구분 기호 — 탭으로 구분된 값은
\t사용 - 따옴표로 감싼 필드 — 필드에 구분 기호가 포함될 때:
"서울, 한국" - 이스케이프된 따옴표 — 감싼 필드 내 따옴표는 이중으로 작성
- 필드 내 줄 바꿈 — 감싼 필드는 여러 줄에 걸칠 수 있음
쉼표로 단순히 분하려고 하지 마세요 — 적절한 CSV 파싱 라이브러리를 사용하세요.
타입 강제 변환
CSV는 42(숫자)와 "42"(문자열)를 구분하지 않으므로 타입 추론 전략이 필요합니다:
function coerce(값) { if (값 === '') return null; if (값 === 'true') return true; if (값 === 'false') return false; if (/^-?\d+(\.\d+)?$/.test(값)) return Number(값); return 값;}중첩 데이터 처리
CSV는 설계상 평면적입니다. 중첩 구조가 있을 때 두 가지 주요 전략이 있습니다: 헤더의 점 표기(address.city)와 대괄호 표기(tags[0], tags[1]). 좋은 변환기는 이를 적절한 JSON 객체와 배열로 전개합니다.
흔한 실수
- 문자 인코딩 — CSV 파일은 UTF-8, Latin-1, Windows-1252일 수 있습니다.
- 일관성 없는 행 길이 — 일부 행은 헤더보다 적은 열을 가질 수 있습니다.
- 헤더 없는 CSV — 모든 CSV 파일에 헤더가 있는 것은 아닙니다.
- 큰 파일 — 2GB CSV를 메모리에 로드하지 마세요. 스트리밍 파서를 사용하세요.
- BOM(바이트 순서 표시) — 일부 CSV 파일은 UTF-8 BOM으로 시작하여 파싱을 망가뜨릴 수 있습니다.
해보기
CSV 데이터를 빠르게 JSON으로 변환해야 한다면 브라우저에서 변환이 이루어지는 로컬 도구를 사용하세요 — 데이터는 업로드되지 않습니다.