JSON ↔ YAML ↔ CSV 변환기
JSON, YAML, CSV를 서로 변환합니다. 엑셀에서 받은 CSV를 API용 JSON으로 바꾸거나 그 반대로 쓸 수 있습니다.
변환은 브라우저 안에서만 이루어집니다. 우편번호처럼 앞자리가 0인 값은 숫자로 바꾸지 않고 문자열로 유지합니다.
세 형식의 성격
| | JSON | YAML | CSV | |---|---|---|---| | 중첩 구조 | 가능 | 가능 | 불가 | | 주석 | 불가 | 가능 | 불가 | | 사람이 쓰기 | 보통 | 좋음 | 좋음 | | 기계가 읽기 | 좋음 | 보통 | 좋음 | | 주 용도 | API | 설정 파일 | 표 데이터 |
CSV로 바꿀 수 있는 데이터
CSV는 표입니다. 행과 열로 표현할 수 있어야 합니다.
따라서 변환하려면 객체 배열이어야 합니다.
[
{ "이름": "홍길동", "부서": "개발" },
{ "이름": "김영희", "부서": "디자인" }
]
최상위가 하나의 객체이거나 숫자 배열이면 열을 만들 수 없어 변환할 수 없습니다.
값 안에 중첩된 객체나 배열이 있으면 한 칸에 담을 수 없어 JSON 문자열로 넣습니다. 중첩이 깊은 데이터는 CSV가 아니라 JSON이나 YAML로 다루는 것이 맞습니다.
행마다 키가 달라도 괜찮습니다. 이 도구는 모든 행의 키를 합쳐 헤더를 만들고, 없는 값은 빈 칸으로 둡니다.
우편번호 앞의 0이 사라지지 않습니다
엑셀에서 CSV를 열면 06236이 6236으로 바뀌는 문제가 유명합니다. 엑셀이 숫자처럼 보이는 값을 자동으로 숫자로 바꾸기 때문입니다.
이 도구는 앞자리가 0으로 시작하는 값을 문자열로 유지합니다. 우편번호, 전화번호, 사업자등록번호, 계좌번호가 모두 안전합니다.
또 자바스크립트의 안전한 정수 범위를 넘는 값도 문자열로 남깁니다. 16자리 카드번호나 64비트 ID가 정밀도를 잃지 않습니다.
CSV의 escape 규칙
값 안에 쉼표나 따옴표, 줄바꿈이 있으면 CSV가 깨질 수 있습니다. RFC 4180은 이렇게 정합니다.
- 특수문자가 있는 값은 큰따옴표로 감쌉니다
- 값 안의 큰따옴표는 두 번 씁니다
예를 들어 he said "hi"는 "he said ""hi"""가 됩니다.
이 도구는 양방향 모두 이 규칙을 지키므로, JSON → CSV → JSON으로 왕복해도 값이 그대로 보존됩니다.
YAML을 쓸 때 조심할 것
YAML은 JSON의 상위 집합입니다. 올바른 JSON은 모두 올바른 YAML이기도 합니다. 반대는 성립하지 않습니다.
사람이 손으로 쓰기 좋아 설정 파일에 널리 쓰이지만 함정이 몇 가지 있습니다.
탭 문자를 허용하지 않습니다. 들여쓰기는 반드시 공백이어야 합니다. 에디터가 탭을 넣도록 설정되어 있으면 파싱 오류가 납니다.
들여쓰기가 곧 구조입니다. 한 칸만 어긋나도 전혀 다른 구조가 됩니다. 붙여넣기 사고가 잦은 이유입니다.
노르웨이 문제. 예전 YAML 1.1에서는 no, yes, on, off가 불리언으로 해석됐습니다. 국가 코드 NO(노르웨이)가 false가 되어 버리는 유명한 사고입니다. YAML 1.2에서는 고쳐졌지만, 오래된 파서를 쓴다면 따옴표로 감싸는 것이 안전합니다.
어떤 형식을 골라야 할까
API 응답이라면 JSON입니다. 표준이고 모든 언어가 기본 지원합니다.
사람이 손으로 편집하는 설정 파일이라면 YAML입니다. 주석을 달 수 있다는 점이 결정적입니다. 왜 이 값을 이렇게 두었는지 기록할 수 있습니다.
표 데이터를 주고받는다면 CSV입니다. 엑셀과 구글 시트에서 바로 열리고, 비개발자와 공유하기 좋습니다.
변환한 데이터는 서버로 가지 않습니다
모든 변환이 브라우저 안에서 이루어집니다. 사내 데이터나 고객 명단처럼 밖으로 나가면 곤란한 자료도 안심하고 붙여넣을 수 있습니다.