JSON → CSV 변환이란 무엇인가요?
JSON(JavaScript Object Notation, RFC 8259)은 구조화된 데이터를 위한 트리 형태의 텍스트 형식이고, CSV(Comma-Separated Values, RFC 4180)는 납작한 표 형식의 텍스트 형식입니다. JSON을 CSV로 변환하면 그 트리가 행과 열로 펼쳐져, API 응답으로 시작된 데이터셋을 한 줄도 다시 입력하지 않고 스프레드시트에서 열 수 있게 됩니다.
JSON → CSV 변환은 어떻게 작동하나요?
모든 변환은 브라우저에서 로컬로 실행됩니다. 큰 흐름은 다음과 같습니다:
JSON.parse가 입력을 검증하고 최상위 레코드 배열임을 확인합니다. 괄호, 쉼표, 인용된 키 이름이 맞지 않으면 명확한 오류가 발생합니다.- 라이터가 레코드에서 헤더 열을 도출합니다 — 모든 키의 합집합이거나 첫 레코드의 키만 사용하거나, 토글로 결정됩니다.
- 중첩 객체는 점 표기 키(
user.id,user.city)로 평탄화되거나 단일 JSON 셀로 직렬화됩니다. 객체 안의 배열은 두 모드 모두에서 JSON 문자열화됩니다. - 각 셀은 RFC 4180에 따라 이스케이프됩니다: 구분자, 큰따옴표, 또는 줄바꿈을 포함한 값은 인용 부호로 감싸지고 내부 인용 부호는 겹쳐집니다. 행은
\r\n줄바꿈으로 연결됩니다. - CSV는 읽기 전용 출력 상자에 나타나며, 다운로드 링크는 MIME 타입
text/csv;charset=utf-8의Blob으로 생성되어 한 번의 클릭으로 파일을 저장할 수 있습니다.
이 도구로 JSON을 CSV로 변환해야 하는 이유는?
- 프라이버시: 모든 파싱, 평탄화, 쓰기 과정이 브라우저에서 일어납니다. 데이터는 절대 서버에 도달하지 않습니다.
- 정확성: 라이터는 RFC 4180을 따릅니다.
Bob, Jr.같은 값은"Bob, Jr."로 출력되어 — 두 열이 아닌 하나의 인용 셀 — 변환 후에도 내부 줄바꿈이나 인용 부호가 보존됩니다. - 스프레드시트 준비 완료: 출력은 키에서 이미 도출된 헤더 열과 함께 Excel이나 Google Sheets에 바로 붙여넣을 수 있어, 데이터를 사용하기 전 수작업 정리가 필요 없습니다.
- 유연성: 중첩 객체를 점 표기 키로 평탄화하거나 단일 셀로 직렬화할 수 있고, 쉼표가 아닌 CSV 방언에도 원하는 구분자를 선택할 수 있으며, 헤더를 모든 키에서 가져올지 첫 레코드에서만 가져올지 선택할 수 있습니다.
JSON → CSV 변환의 일반적인 활용 사례는 무엇인가요?
데이터 작업과 도구 작업 곳곳에서 JSON을 CSV로 평탄화하는 장면이 등장합니다:
- 데이터 내보내기: API 응답을 CSV 파일로 바꿔서 재무, 운영, 프로덕트 팀이 코드를 작성하지 않고도 Excel이나 Google Sheets에서 열 수 있게 합니다.
- 보고서 작성: JSON 쿼리 결과를 스프레드시트에 넣어 피벗 테이블, 차트, 또는 빠른 공식 열을 만듭니다. 이런 작업을 원시 JSON을 상대로 하면 매우 고통스럽습니다.
- 스프레드시트 검토: 중첩된 JSON 구성(설정, 기능 플래그, A/B 변형)을 CSV로 평탄화해 비기술 검토자가 셀 단위로 읽고 편집할 수 있게 합니다.
JSON → CSV 변환 예시는 어떻게 생겼나요?
[{"name":"Alice","age":30},{"name":"Bob, Jr.","age":25}]를 붙여넣고 쉼표 구분자로 변환을 누르면 세 줄이 나옵니다: name,age 헤더 행, Alice,30 데이터 행, 그리고 "Bob, Jr.",25 행 — 내부 쉼표가 RFC 4180 인용을 유발합니다. 바로 그 쉼표가 순진한 join을 망가뜨리는 요소인데, 여기서는 RFC 4180 인용이 셀을 온전하게 유지해 줍니다.
이 JSON → CSV 변환기는 전적으로 브라우저에서 실행되나요?
네. 모든 파싱, 평탄화, 쓰기 과정이 브라우저 탭 안의 JavaScript로 로컬에서 실행됩니다. 이 도구는 fetch, XMLHttpRequest, navigator.sendBeacon을 전혀 호출하지 않습니다 — 여러분의 JSON 페이로드는 저희 서버, 제3자 변환 서비스, 어떤 분석 파이프라인에도 전달되지 않습니다. 페이지를 한 번 로드한 뒤에는 오프라인에서도 동작합니다. 런타임 API 의존성이 없는 정적 HTML/CSS/JS 번들이기 때문입니다.
이 변환기가 처리할 수 있는 최대 입력 크기는 얼마인가요?
변환기는 전체 입력을 메모리에 버퍼링하고 메인 스레드에서 동기적으로 실행하므로 실제 한계는 기기 성능에 좌우됩니다. 최신 노트북에서는 약 10 MB의 JSON 배열(약 10만 건의 일반적인 레코드)을 눈에 띄는 지연 없이 CSV로 평탄화합니다. 그 이상에서는 UI가 멈출 수 있습니다. Web Worker와 청크 라이터를 활용한 스트리밍 변환은 다음 단계로 예정되어 있습니다 — 지금은 매우 큰 데이터셋은 붙여넣기 전에 잘라서 사용하세요.
라이터는 쉼표, 인용 부호, 줄바꿈을 포함한 값을 어떻게 처리하나요?
RFC 4180에 따라 처리합니다. 현재 구분자, 큰따옴표, CR, LF 중 하나라도 포함한 값은 큰따옴표로 감싸지고 내부 인용 부호는 겹쳐집니다. 그래서 Bob, Jr. 같은 이름은 두 열이 아닌 단일 셀 "Bob, Jr."이 되고, 여러 줄 설명도 하나의 셀에 남습니다. 바로 여기가 소박한 join(',')이 틀리는 부분입니다.
CSV로 변환할 때 중첩된 JSON 객체는 어떻게 되나요?
중첩 객체는 중첩 객체 토글에 따라 처리됩니다. 기본값인 평탄화 모드에서는 키가 점으로 이어져서 — {"user":{"id":1,"city":"Paris"}}는 user.id와 user.city 두 열이 됩니다. 문자열화 모드에서는 중첩 객체가 단일 JSON 셀 값으로 직렬화되며, RFC 4180 인용 부호 이스케이프가 그대로 유지되어 왕복 시 구조가 보존됩니다. 객체 안의 배열은 두 모드 모두에서 JSON 문자열화됩니다.
CSV 출력에서 어떤 구분자를 사용할 수 있나요?
네 가지: 쉼표(,, RFC 4180 기본값), 세미콜론(;, 유럽 로케일에서 흔함), 탭(\t, TSV 방언), 파이프(|). 다운스트림 도구가 기대하는 것을 선택하세요. 라이터는 선택된 구분자를 포함하는 셀을 이스케이프하므로 선택이 값을 손상시키지 않습니다.
이 JSON → CSV 변환기는 배열을 평탄화하고 RFC 4180을 따르는 출력을 만들어 스프레드시트, 보고서, 코드 리뷰에 바로 붙여넣을 수 있게 합니다 — 단 한 바이트도 업로드하지 않고. 반대 방향이 필요하신가요? CSV → JSON 변환기가 다른 방향을 파싱합니다.