CSV 는 어떻게 JSON 이 되나?
CSV 는 타입 정보가 없는 텍스트 직사각형이다. 모든 칸이 문자열이고, 구조라고는 열 순서뿐이다. JSON 은 진짜 타입을 가진 나무다. 둘 사이를 옮긴다는 것은 CSV 파일이 말해 주지 않는 두 가지를 정하는 일이다 — 키를 뭐라 부를지, 그리고 어떤 문자열이 실은 숫자인지.
이 변환기는 헤더 줄에서 열 이름을 가져와 나머지 각 줄을 배열 안의 객체 하나로 만든다. 숫자나 불리언으로 보이는 값은 진짜 JSON 숫자와 불리언이 되므로 받는 쪽에서 다시 변환하지 않아도 된다 — 아래에 적은 한 가지 예외만 빼고.
Each record is located on a separate line, delimited by a line break.
기능
- 파서가 동의할 타입
- 42 는 숫자가, true 는 불리언이, 빈 칸은 null 이 된다. 받는 쪽이 따옴표에 갇힌 문자열 더미가 아니라 바로 쓸 수 있는 값을 받는다.
- 앞자리 0 은 문자열로 남는다
- 03187 은 "03187" 로 남는다. 우편번호·전화번호·0 으로 채운 식별자는 숫자가 되는 순간 뜻을 잃고, 그 손실은 조용하다.
- 구분자 추측
- 쉼표·세미콜론·탭·파이프를 따옴표 밖에서 얼마나 고르게 나타나는지로 시험한다. 한국어·유럽 로캘의 엑셀은 세미콜론으로 내보내고, 쉼표만 아는 변환기는 그 파일을 한 열로 만든다.
- 따옴표 필드가 살아남는다
- "성, 이름" 같은 값은 한 값으로 남고, 필드 안에서 두 번 쓴 따옴표도 RFC 4180 대로 풀린다.
- 칸 수가 안 맞는 줄을 알린다
- 헤더보다 칸이 많거나 적은 줄을 조용히 자르지 않고 짚어 준다. 대개 따옴표가 빠진 자리이고, 운영에서 발견하면 훨씬 비싸다.
사용법
- 1
CSV 를 붙여넣는다
파일 내용을 붙여넣거나, 스프레드시트에서 바로 복사한 범위를 붙여넣는다.
- 2
헤더 줄을 확인한다
"첫 줄이 헤더" 를 켜 두어야 JSON 키가 열 이름에서 나온다.
- 3
타입을 정한다
보통의 API 본문이면 타입 추론을 켠 채로, 모든 값이 문자열로 남아야 하면 끈다.
- 4
JSON 을 복사한다
배열을 복사해 요청 본문·픽스처·시드 파일에 붙여넣는다.
자주 묻는 질문
CSV 를 JSON 배열로 어떻게 바꾸나?
헤더 줄이 있는 CSV 를 붙여넣으면 데이터 줄마다 객체 하나씩, 키는 헤더에서 가져온 배열이 나온다. 거의 모든 API 와 테스트 픽스처가 기대하는 모양이다.
ID 열이 숫자로 바뀌었다
숫자처럼 보였기 때문이다. 모든 값이 문자열로 남아야 하면 타입 추론을 끈다. 앞자리가 0 인 값은 알아서 문자열로 남지만, 주문번호 같은 긴 숫자는 변환된다 — 아주 길면 자바스크립트가 정확히 표현하는 범위를 넘으므로, 만드는 쪽에서도 ID 는 문자열이 안전하다.
빈 칸은 어떻게 되나?
타입 추론을 켜면 null, 끄면 빈 문자열이 된다. CSV 는 빈 문자열과 값 없음을 구분하지 못하므로 이건 번역이 아니라 선택이다 — 받는 쪽이 기대하는 쪽으로 고른다.
엑셀에서 내보낸 파일도 되나?
된다. 쉼표를 소수점으로 쓰는 로캘의 엑셀이라면 구분자를 세미콜론으로 하거나 자동으로 둔다. 글자가 깨져 들어오면 UTF-8 BOM 없이 저장된 파일이다 — 엑셀에서 "CSV UTF-8" 로 저장한다.
파일이 업로드되나?
아니다. 파싱과 변환이 브라우저에서 돌고 이 페이지에는 백엔드가 없다. 고객 내보내기 파일도 기기 밖으로 내보내지 않고 바꿀 수 있다.
CSV 뷰어와는 뭐가 다른가?
뷰어는 파일을 읽는 곳이다 — 표와 추측한 구분자, 깨진 줄을 보여준다. 이 페이지는 거기서 JSON 을 만드는 곳이다. 파서는 같은 것을 쓴다.
여기서 막힌다면
이 도구가 따르는 규격
- RFC 4180 — CSV 파일의 공통 형식과 MIME 타입 — 이 파서가 따르는 따옴표·레코드 규칙.
- RFC 8259 §6 — JSON 의 수 — 아주 긴 숫자 ID 가 JSON 문자열로 더 안전한 이유.