JSON을 CSV로 변환: 객체 배열을 펴기

JSON의 객체 배열은 CSV 테이블에 매핑됩니다 — 객체당 한 행, 키의 합집합으로 열을 구성합니다. 진짜 작업은 따옴표 처리와 중첩 값 처리에 집중됩니다.

「객체 배열」 형태

CSV는 평평한 테이블이라, 깔끔하게 변환되는 JSON은 객체의 배열입니다: 각 객체가 행이 되고 각 키가 열이 됩니다.

헤더 만들기

첫 번째 객체의 키만이 아니라 모든 객체 키의 합집합을 헤더로 사용하세요. 그래야 키가 더 많거나 빠진 레코드도 줄을 맞출 수 있습니다. 빠진 셀은 비워 둡니다.

따옴표 규칙

쉼표, 큰따옴표, 줄바꿈이 포함된 값은 큰따옴표로 감싸고, 내부의 큰따옴표는 두 개로 늘려야 합니다. 그렇지 않으면 열이 어긋납니다.

중첩된 값

객체와 배열에는 평평한 CSV 형태가 없습니다. 셀 안에 JSON 텍스트로 쓰거나(가역), address.city처럼 점으로 구분된 열로 펼치세요.

헤더 순서와 안정성

키 합집합을 정렬하거나, 첫 번째 레코드의 키 순서를 고정하고 추가 키를 뒤에 붙이세요. 안정적인 헤더 순서는 내보내기 간 diff를 의미 있게 만들고, 매번 열이 뒤섞이는 것을 피합니다.

날짜와 숫자 서식

스프레드시트는 값을 적극적으로 재해석합니다: 긴 숫자 ID는 정밀도가 떨어지고, ISO 날짜는 형식이 바뀌며, 선행 0은 사라집니다. 값이 그대로 왕복해야 한다면 따옴표로 감싸고, Excel에 붙일 때는 앞에 작은따옴표를 붙이세요.

Excel과 Google Sheets 호환성

Excel이 유니코드를 인식하도록 CRLF 줄 끝과 BOM(byte-order mark가 있는 UTF-8)을 쓰세요. Google Sheets에서 BOM은 선택이지만, 쉼표 구분자와 큰따옴표 이스케이프는 그대로 적용됩니다.

CSV에서 JSON으로 되돌리기

행은 따옴표를 인식하는 split으로 파싱하고(쉼표로 단순 split 금지), 첫 행을 필드 이름으로 사용하며, 열별로 숫자・불리언・ISO 날짜로 추론을 시도하세요. 이 도구의 왕복은 열이 전부 숫자가 아닌 한 문자열을 문자열 그대로 둡니다.

흔한 함정

다음은 대부분의 CSV 내보내기를 깨는 문제들입니다.

  • 문자열 값 안에 이스케이프되지 않은 쉼표
  • 따옴표 없이 셀 안에 들어간 줄바꿈
  • 혼합된 인코딩(UTF-8 vs Latin-1)이 만든 깨짐
  • 큰 정수(ID 등)가 스프레드시트에서 조용히 잘림
  • 불리언이 TRUE/FALSE가 아니라 문자열 "true"/"false"로 저장됨