viewer.csslab.dev

CSV → JSON 변환기

스프레드시트 내보내기를 JSON 배열로. 숫자와 불리언은 제 타입으로.

CSV 는 어떻게 JSON 이 되나?

CSV 는 타입 정보가 없는 텍스트 직사각형이다. 모든 칸이 문자열이고, 구조라고는 열 순서뿐이다. JSON 은 진짜 타입을 가진 나무다. 둘 사이를 옮긴다는 것은 CSV 파일이 말해 주지 않는 두 가지를 정하는 일이다 — 키를 뭐라 부를지, 그리고 어떤 문자열이 실은 숫자인지.

이 변환기는 헤더 줄에서 열 이름을 가져와 나머지 각 줄을 배열 안의 객체 하나로 만든다. 숫자나 불리언으로 보이는 값은 진짜 JSON 숫자와 불리언이 되므로 받는 쪽에서 다시 변환하지 않아도 된다 — 아래에 적은 한 가지 예외만 빼고.

Each record is located on a separate line, delimited by a line break.
RFC 4180 §2

기능

파서가 동의할 타입
42 는 숫자가, true 는 불리언이, 빈 칸은 null 이 된다. 받는 쪽이 따옴표에 갇힌 문자열 더미가 아니라 바로 쓸 수 있는 값을 받는다.
앞자리 0 은 문자열로 남는다
03187 은 "03187" 로 남는다. 우편번호·전화번호·0 으로 채운 식별자는 숫자가 되는 순간 뜻을 잃고, 그 손실은 조용하다.
구분자 추측
쉼표·세미콜론·탭·파이프를 따옴표 밖에서 얼마나 고르게 나타나는지로 시험한다. 한국어·유럽 로캘의 엑셀은 세미콜론으로 내보내고, 쉼표만 아는 변환기는 그 파일을 한 열로 만든다.
따옴표 필드가 살아남는다
"성, 이름" 같은 값은 한 값으로 남고, 필드 안에서 두 번 쓴 따옴표도 RFC 4180 대로 풀린다.
칸 수가 안 맞는 줄을 알린다
헤더보다 칸이 많거나 적은 줄을 조용히 자르지 않고 짚어 준다. 대개 따옴표가 빠진 자리이고, 운영에서 발견하면 훨씬 비싸다.

사용법

  1. 1

    CSV 를 붙여넣는다

    파일 내용을 붙여넣거나, 스프레드시트에서 바로 복사한 범위를 붙여넣는다.

  2. 2

    헤더 줄을 확인한다

    "첫 줄이 헤더" 를 켜 두어야 JSON 키가 열 이름에서 나온다.

  3. 3

    타입을 정한다

    보통의 API 본문이면 타입 추론을 켠 채로, 모든 값이 문자열로 남아야 하면 끈다.

  4. 4

    JSON 을 복사한다

    배열을 복사해 요청 본문·픽스처·시드 파일에 붙여넣는다.

자주 묻는 질문

CSV 를 JSON 배열로 어떻게 바꾸나?

헤더 줄이 있는 CSV 를 붙여넣으면 데이터 줄마다 객체 하나씩, 키는 헤더에서 가져온 배열이 나온다. 거의 모든 API 와 테스트 픽스처가 기대하는 모양이다.

ID 열이 숫자로 바뀌었다

숫자처럼 보였기 때문이다. 모든 값이 문자열로 남아야 하면 타입 추론을 끈다. 앞자리가 0 인 값은 알아서 문자열로 남지만, 주문번호 같은 긴 숫자는 변환된다 — 아주 길면 자바스크립트가 정확히 표현하는 범위를 넘으므로, 만드는 쪽에서도 ID 는 문자열이 안전하다.

빈 칸은 어떻게 되나?

타입 추론을 켜면 null, 끄면 빈 문자열이 된다. CSV 는 빈 문자열과 값 없음을 구분하지 못하므로 이건 번역이 아니라 선택이다 — 받는 쪽이 기대하는 쪽으로 고른다.

엑셀에서 내보낸 파일도 되나?

된다. 쉼표를 소수점으로 쓰는 로캘의 엑셀이라면 구분자를 세미콜론으로 하거나 자동으로 둔다. 글자가 깨져 들어오면 UTF-8 BOM 없이 저장된 파일이다 — 엑셀에서 "CSV UTF-8" 로 저장한다.

파일이 업로드되나?

아니다. 파싱과 변환이 브라우저에서 돌고 이 페이지에는 백엔드가 없다. 고객 내보내기 파일도 기기 밖으로 내보내지 않고 바꿀 수 있다.

CSV 뷰어와는 뭐가 다른가?

뷰어는 파일을 읽는 곳이다 — 표와 추측한 구분자, 깨진 줄을 보여준다. 이 페이지는 거기서 JSON 을 만드는 곳이다. 파서는 같은 것을 쓴다.

여기서 막힌다면

이 도구가 따르는 규격

함께 쓰는 도구