JSON에서 CSV 변환: 구조를 평평하게 만드는 방법
JSON과 CSV는 데이터 저장 방식이 근본적으로 다르다. JSON은 계층적 구조와 여러 데이터 타입(숫자, 불리언, null 등)을 지원하지만, CSV는 모든 값을 문자열로 저장하며 중첩 구조가 없다. 이 페이지의 변환기는 JSON 파일을 업로드하면 브라우저 내에서 전적으로 처리하여 CSV로 내보낸다. 업로드된 데이터는 서버로 전송되지 않으므로 개인정보 보호에 유리하다.
주요 차이점: 형식 정보의 손실
변환 과정에서 다음 정보가 모두 사라진다:
- 데이터 타입: JSON의 숫자, 불리언, null은 CSV에서 모두 문자열이 된다. 예를 들어
123은"123"으로,true는"true"로 변환된다. - 중첩 구조: 객체 안의 객체는 점 표기법(dot-path)으로 평평해진다. 예:
address.city형태. - 배열 처리: 객체 배열은 행으로 변환, 배열의 배열은 각 내부 배열이 행이 된다.
- 선행 0 손실: JSON의
"00123"은 숫자처럼 보이면 CSV에서123으로 저장될 가능성이 높다. 따옴표로 명시된 문자열이 아니면 자동으로 숫자로 해석되기 때문이다. - 쉼표와 줄바꿈 처리: CSV 구분자와 충돌하는 값은 자동으로 큰따옴표로 감싸진다.
변환 규칙과 제한 사항
이 도구는 테이블 형태의 JSON만 처리한다. 조건:
- 단일 객체 배열(예:
[{"name":"a","age":1}, {...}]) → 각 객체가 행, 키가 열. - 배열의 배열(예:
[["name","age"],["a",1]]) → 첫 번째 행이 헤더가 될 수도 있지만, 정확한 처리는 입력 구조에 따름. - 위 형태가 아니면 오류 메시지: "This JSON is invalid or not table-shaped."
기타 오류 상황:
| 오류 조건 | 표시 메시지 (원문) |
|---|---|
| 파일이 너무 큼 | "This file is too large. Use a file under ‹max›." |
| 지원되지 않는 형식 | "Choose a CSV, JSON or XLSX file." |
| 변환 실패 | "Could not convert this file." |
| 취소됨 | "Conversion cancelled." |
| 시간 초과 | "This conversion is taking too long. Try a smaller file." |
모든 처리는 클라이언트 사이드에서 이루어지므로 변환 중 중단하면 안전하다.
CSV 구분자 선택의 중요성
사용자는 출력 CSV의 구분자를 콤마(,), 세미콜론(;), 탭(\t) 중 선택할 수 있다. 콤마가 기본값이다.
구분자를 잘못 선택하면 열이 제대로 나뉘지 않거나 데이터가 깨질 수 있다. 특히 숫자에 천 단위 쉼표가 포함된 경우 콤마 구분자를 쓰면 혼란이 발생한다.
자주 발생하는 문제와 주의사항
- 중첩 객체 평면화:
{"person": {"name": "Kim", "age": 30}}→person.name,person.age열로 변환. 깊이가 깊어지면 열 이름이 길어지고 CSV의 가독성이 떨어진다. - 배열이 포함된 객체:
{"tags": ["a","b"]}→ 배열 자체가 하나의 문자열로 저장된다. 이 도구는 기본적으로 배열을 문자열화하지 않고 행을 늘리지 않는다(배열의 배열은 예외). - 빈 값과 null: JSON의
null은 빈 문자열""로 변환된다. CSV에서null이라는 문자열을 원하면 변환 전에 값을 수정해야 한다. - 인코딩: 모든 텍스트는 UTF-8로 처리된다. Excel에서 CSV를 열 때 UTF-8을 인식하지 못하면 한글이 깨질 수 있으므로 BOM(Byte Order Mark)이 필요할 수 있지만, 이 도구는 자체적으로 BOM을 추가하지 않는다. 필요한 경우 변환 후 편집기로 추가해야 한다.
FAQ
Q: JSON이 테이블 형태가 아닌 경우 어떻게 되나요?
A: This JSON is invalid or not table-shaped. 오류가 표시됩니다. 단일 객체 배열 또는 배열의 배열 형태여야 합니다.
Q: 중첩된 객체는 어떻게 표현되나요?
A: 점 표기법(dot-path)을 사용해 평평해집니다. 예: address.city, address.zip.
Q: 변환 중 데이터가 서버로 전송되나요?
A: 아니요. 모든 처리는 브라우저 내에서 이루어집니다. 파일은 서버에 전혀 업로드되지 않습니다.
Q: 최대 파일 크기는 얼마인가요?
A: 파일 크기는 최대 8MB입니다. 8MB를 초과하면 This file is too large. Use a file under ‹max›. 오류 메시지가 나타납니다.
Q: 숫자 앞의 0이 사라지는 이유는 무엇인가요?
A: JSON에서 값이 숫자로 인식되면 선행 0이 제거됩니다. 이를 방지하려면 JSON에서 값을 문자열로 명시하거나, 변환 후 따옴표 처리를 확인해야 합니다.
Q: 구분자를 바꿀 수 있나요?
A: 네, 콤마, 세미콜론, 탭 중 선택 가능합니다.