viewer.csslab.dev

JSON → CSV 변환기

JSON 배열을 표로 바꾼다. 중첩 객체를 펼치고, 어느 필드도 잃지 않는다.

JSON 은 어떻게 CSV 가 되나?

JSON 과 CSV 는 데이터를 서로 맞지 않는 모양으로 담는다. JSON 은 나무다 — 객체 안에 객체가 들어가고, 같은 배열의 객체들이 서로 다른 필드를 가질 수 있다. CSV 는 직사각형이다 — 고정된 열 하나, 레코드마다 한 행, 중첩 없음. 앞의 것을 뒤의 것으로 바꾼다는 것은 모양이 어긋나는 자리에서 무엇을 할지 정하는 일이다.

이 변환기는 모든 객체의 키를 합집합으로 모은다. 마지막 레코드에만 있는 필드도 조용히 사라지지 않고 자기 열을 갖는다. 중첩 객체는 점으로 이은 열이 되고 — user.contact.email — 배열은 한 칸 안에 JSON 으로 쓴다. 펼치면 행마다 열 개수가 달라져 결과가 더 이상 표가 아니게 되기 때문이다.

Each line should contain the same number of fields throughout the file.
RFC 4180 §2

기능

어느 필드도 잃지 않는다
열은 첫 객체가 아니라 모든 객체의 키를 합쳐 만든다. 첫 레코드만 읽는 변환기는 뒤에 나오는 필드를 조용히 버린다 — 그 스프레드시트를 이미 쓰고 있을 때에야 알아채는 종류의 데이터 손실이다.
중첩 객체는 점 표기 열로
user.contact.email 이 그 자체로 하나의 열이 된다. 구조가 스프레드시트에서 정렬하고 거를 수 있는 형태로 남는다. 원하면 모드를 바꿔 중첩 객체를 한 칸 안에 JSON 으로 둘 수도 있다.
배열은 일부러 통째로 둔다
배열은 여러 열로 흩지 않고 한 칸에 JSON 으로 쓴다. 행마다 배열 길이가 달라서 흩는 순간 파일이 직사각형이기를 그만두기 때문이다. 그렇게 처리된 열은 결과 위에 적어 준다.
RFC 4180 따옴표 규칙
구분자·따옴표·줄바꿈이 든 값은 감싸고 안쪽 따옴표는 두 번 쓴다. "성, 이름" 같은 값이 엑셀까지 온전히 간다.
구분자를 고른다
쉼표·세미콜론·탭·파이프. 쉼표를 소수점으로 쓰는 로캘 — 한국어·독일어·프랑스어 — 의 엑셀은 세미콜론을 기대한다.

사용법

  1. 1

    JSON 을 붙여넣는다

    객체 배열을 붙여넣는다. 객체 하나만 넣어도 되고, 그러면 한 행이 된다.

  2. 2

    중첩을 어떻게 다룰지 고른다

    펼치기는 중첩 객체를 점 표기 열로 바꾸고, 다른 모드는 중첩 객체를 한 칸 안에 JSON 으로 둔다.

  3. 3

    구분자를 고른다

    대부분의 도구에는 쉼표. 쉼표를 소수점으로 쓰는 로캘의 엑셀에서 열 파일이면 세미콜론.

  4. 4

    CSV 를 복사한다

    결과를 복사해 스프레드시트에 붙여넣거나 .csv 로 저장한다.

자주 묻는 질문

중첩된 JSON 을 CSV 로 어떻게 바꾸나?

중첩 객체는 기본적으로 점으로 이은 열 이름으로 펼쳐진다. user.contact 아래의 email 필드는 user.contact.email 이라는 열이 된다. 모든 말단 값이 스프레드시트에서 각각 다뤄질 수 있게 된다. 구조를 그대로 두고 싶으면 중첩 모드를 바꾼다 — 중첩 객체가 한 칸 안에 JSON 으로 들어간다.

JSON 안의 배열은 어떻게 되나?

한 칸에 JSON 텍스트로 들어간다. 배열을 여러 열로 흩는 것은 모든 행의 원소 개수가 같을 때만 가능한데 그런 경우가 드물고, 아닌 순간 파일이 직사각형이기를 그만둔다. 배열을 통째로 두는 것은 손실이 없고, 흩는 것은 있다.

CSV 에 빈 칸이 생긴다

그 객체에 그 필드가 없었기 때문이다. JSON 은 배열 안의 객체마다 다른 키를 가져도 되지만 CSV 는 아니다. 그래서 그 필드가 없는 레코드는 그 열에서 빈 칸이 된다. 이것이 올바른 번역이다 — 대안은 그 열을 아예 없애는 것이고, 그러면 다른 행이 갖고 있던 데이터까지 잃는다.

엑셀에서 제대로 열리나?

시스템 로캘이 쉼표를 소수점으로 쓴다면 세미콜론 구분자를 고른다. 한국어·독일어·프랑스어 윈도우가 그렇고, 그 환경의 엑셀은 세미콜론을 기대한다. 그런 시스템에서 쉼표로 나뉜 파일을 열면 모든 행이 한 열에 뭉쳐 들어간다.

JSON 이 업로드되나?

아니다. 변환은 사용자의 기기에서 자바스크립트로 처리되고 이 페이지에는 백엔드가 없다. 고객 데이터가 든 API 응답도 기기 밖으로 내보내지 않고 바꿀 수 있다.

CSV 뷰어와는 뭐가 다른가?

이 페이지는 한 방향으로만 바꾼다 — JSON 이 들어가고 CSV 가 나온다. CSV 뷰어는 CSV 파일을 읽어 구분자를 추측하고 표로 보여주는 반대 방향이다. 둘 다 브라우저 안에서만 동작한다.

여기서 막힌다면

이 도구가 따르는 규격

함께 쓰는 도구