본문 바로가기

JSON CSV 변환

API 응답, 내보내기 파일, JSON Lines를 Excel에서 깔끔하게 열리는 CSV로 바꿉니다. 레코드는 자동으로 찾고, 중첩 필드는 읽기 쉬운 열로 펼치며, 큰 ID는 한 자리도 빠짐없이 유지합니다.

  • 저장되지 않음
  • 대기열 없음, 기다림 없음
  • 회원가입 없음, 워터마크 없음

사용 방법

1

JSON 추가

.json이나 .jsonl 파일을 끌어다 놓거나, JSON을 입력란에 바로 붙여 넣으세요.

2

레코드 선택

data.items처럼 깊숙한 곳에 있어도 레코드 목록을 자동으로 찾습니다. 배열을 어떻게 쓸지 고르고 미리보기를 확인하세요.

3

다운로드

원하는 구분 기호와 인코딩으로, Excel, Google Sheets, 데이터베이스에 바로 쓸 수 있는 CSV를 받습니다.

트리를 격자로 펼치기

JSON은 트리이고 CSV는 사각형이며, 변환 전체가 하나를 다른 하나로 바꾸는 문제입니다. 깔끔한 경우는 모든 객체가 같은 키를 가진 객체 배열 입니다. 객체 하나가 한 행, 키 하나가 한 열이 되며, 잃는 것이 없습니다. 대부분의 API 응답과 내보내기 파일이 이런 모양이라 대개는 그냥 잘 됩니다. 곤란한 경우는 모두 이런 모양이 아닌 문서에서 생깁니다.

중첩 객체는 키를 이어 붙여 펼칩니다. 그래서 고객 안의 주소 객체는 address.city, address.postcode 같은 열이 됩니다. 어떤 스프레드시트든 다룰 수 있지만 어떤 표준도 정의하지 않은 관례입니다. 일부 객체에만 있는 키는 그 키가 없는 행에서 빈 열이 되며, 이것이 옳은 답입니다. 대안은 일부 레코드에만 있는 데이터를 버리는 것이기 때문입니다.

중첩 배열은 격자가 정말로 따라갈 수 없는 부분입니다. 주문 품목 세 개가 든 레코드 하나는 세 행이 아니라 목록을 담은 한 행입니다. 세 행으로 바꾸면 다른 모든 필드가 중복되고 데이터의 의미가 슬그머니 바뀝니다. 그래서 객체 배열 하나만 행으로 펼치고, 나머지 배열은 해당 셀에 텍스트로 씁니다. 주문이 아니라 주문 품목이 필요하다면 변환 대상을 그 배열로 지정하세요. 목록 두 개가 나란히 있는 트리에는 하나뿐인 정답 사각형이 없으며, 어느 쪽을 고를지는 여러분만 정할 수 있습니다.

내보낼 때 발목을 잡는 세부 사항이 두 가지 있습니다. 쉼표, 따옴표, 줄바꿈이 든 값은 살아남도록 따옴표로 감싸는데, 이는 올바른 CSV이지만 원시 파일을 들여다보면 이상해 보입니다. 그리고 긴 숫자 식별자는 CSV가 스프레드시트에 들어가는 순간 위험해집니다. Excel은 이를 숫자로 읽어 15자리를 넘으면 반올림하고 앞자리 0을 없애는데, 이는 변환이 아니라 스프레드시트가 만드는 문제입니다.

다른 작업이 필요할 때

모양을 추측하지 않고 직접 정해야 할 때는 jq 가 맞는 도구입니다. jq -r '.orders[] | [.id, .customer.name, .total] | @csv' 는 원하는 수준에서 원하는 필드만 정확히 골라내며, 이는 자동 평탄화 도구가 줄 수 없는 제어력입니다. 스트리밍도 되므로 파일 크기도 더 이상 고민거리가 아닙니다.

중첩 데이터 전반에는 Miller 의 mlr --ijson --ocsv flatten 과 Python의 pandas.json_normalize 가 얼마나 깊이 펼칠지, 목록은 어떻게 할지를 명시적으로 제어하게 해 줍니다. 그리고 JSON이 표 형태가 아니라 정말로 계층 구조라면, CSV로 변환하는 것 자체가 잘못된 생각일 수 있습니다. 데이터베이스나 줄 단위 JSON 파일은 격자가 버리려는 구조를 그대로 유지합니다.

자주 묻는 질문

중첩 JSON은 어떻게 열이 되나요?

중첩된 필드마다 경로 이름을 딴 열 하나가 됩니다. {"address": {"city": "Oslo"}}는 address.city라는 열이 됩니다. 열은 알파벳순이 아니라 데이터에 처음 나타난 순서대로 배치되며, 필드가 없는 레코드는 그 셀이 비어 있을 뿐입니다.

배열은 어떻게 되나요?

직접 고릅니다. 값을 한 셀에 합치거나("red; green"), 번호가 붙은 열로 펼치거나(tags.0, tags.1), JSON 텍스트로 그대로 두거나, 주문 품목처럼 객체 배열이라면 상위 필드를 반복하며 항목마다 한 행씩 쓸 수 있습니다.

큰 숫자도 정확히 유지되나요?

네. Twitter, Discord, 64비트 데이터베이스 ID처럼 JavaScript가 표현할 수 있는 범위를 넘는 ID도 한 자리씩 그대로 복사합니다. 대부분의 변환기는 1234567890123456789를 1234567890123456800으로 말없이 반올림합니다.

JSON Lines(NDJSON)도 지원하나요?

네. 한 줄에 JSON 객체 하나씩 있는 파일은 자동으로 인식하며, 각 줄이 한 행이 됩니다.

JSON에 오류가 있으면요?

문제가 되는 텍스트를 강조해 정확한 줄과 열을 알려 드리고, 예를 들어 끝에 붙은 쉼표나 JavaScript 코드에서 복사해 온 작은따옴표처럼 쉬운 말로 설명해 드립니다.

제 데이터가 어딘가에 저장되나요?

아니요. JSON을 읽고 CSV를 쓰는 작업은 여기서 이뤄지며, 어디에도 전송되지 않고 아무것도 저장하지 않습니다.

참고: 한 번에 객체 배열 하나만 행으로 펼칠 수 있으며, 다른 배열은 해당 셀에 기록됩니다. 아주 큰 파일은 브라우저 메모리에 따라 제한됩니다.

내 웹사이트에 이 도구 넣기

블로그, 수업 페이지, 도움말 글 어디에나 무료로 넣을 수 있습니다. 코드 한 줄만 붙여 넣으면 방문자가 페이지에서 바로 사용할 수 있습니다.