JSON ↔ YAML ↔ CSV 변환기
JSON, YAML, CSV를 서로 변환합니다. 엑셀에서 받은 CSV를 API용 JSON으로 바꾸거나 그 반대로 쓸 수 있습니다.
변환은 브라우저 안에서만 이루어집니다. 우편번호처럼 앞자리가 0인 값은 숫자로 바꾸지 않고 문자열로 유지합니다.
세 형식의 성격
| | JSON | YAML | CSV | |---|---|---|---| | 중첩 구조 | 가능 | 가능 | 불가 | | 주석 | 불가 | 가능 | 불가 | | 사람이 쓰기 | 보통 | 좋음 | 좋음 | | 기계가 읽기 | 좋음 | 보통 | 좋음 | | 주 용도 | API | 설정 파일 | 표 데이터 |
도구 사용법
입력 형식과 출력 형식을 각각 고르면 왼쪽에 붙여 넣은 내용이 오른쪽에 바로 변환됩니다. 가운데 버튼은 두 형식을 맞바꾸는 것이라, JSON을 CSV로 만든 뒤 결과를 다시 JSON으로 돌려 검산할 때 편합니다. 입력 형식을 잘못 고르면 파싱 오류가 나므로, 오류가 나면 내용을 고치기 전에 형식 선택부터 확인하세요.
JSON으로 출력하면 들여쓰기 2칸으로 정렬되어 나옵니다. 압축된 한 줄 JSON이 필요하거나 키를 정렬하려면 결과를 JSON 포맷터로 옮기면 됩니다.
CSV를 읽을 때 값이 바뀌는 규칙
CSV의 모든 값은 원래 문자열입니다. 이 도구는 JSON이나 YAML로 바꿀 때 값의 생김새를 보고 타입을 정합니다.
| CSV 값 | 변환 결과 | 이유 |
| ----------------- | ------------------ | ------------------------------------- |
| 123 | 숫자 123 | 숫자로 안전하게 표현 가능 |
| 06236 | 문자열 "06236" | 앞자리 0 보존 |
| 1234567890123456789 | 문자열 | 자바스크립트 안전 정수 범위 초과 |
| true / false | 불리언 | |
| null | null | |
| (빈 칸) | null | 값이 없음 |
| 3.14 | 숫자 3.14 | |
전화번호처럼 하이픈이 든 값은 숫자가 아니므로 문자열로 남습니다. 반대로 상품 코드가 1001처럼 순수 숫자라면 숫자로 바뀌므로, 문자열이어야 하는 코드는 CSV 단계에서 따옴표로 감싸도 숫자로 인식됩니다. 이런 열이 있으면 변환 뒤 JSON에서 확인이 필요합니다.
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에서는 고쳐졌지만, 오래된 파서를 쓴다면 따옴표로 감싸는 것이 안전합니다.
엑셀과 주고받을 때
엑셀에서 다른 이름으로 저장 → CSV UTF-8로 저장한 파일을 메모장으로 열어 붙여 넣으면 됩니다. 그냥 "CSV(쉼표로 분리)"로 저장하면 한글이 EUC-KR로 저장되어 다른 프로그램에서 깨질 수 있습니다. 반대로 이 도구가 만든 CSV를 엑셀에서 열면 한글이 깨지는 경우가 있는데, 이때는 엑셀의 데이터 → 텍스트/CSV 가져오기에서 원본 인코딩을 UTF-8로 지정하면 됩니다.
구분자는 쉼표만 지원하므로 탭으로 구분된 파일은 먼저 쉼표로 바꿔야 합니다. 첫 줄은 항상 헤더로 봅니다. 헤더가 없는 CSV를 넣으면 첫 행이 키 이름이 되어 버리므로 헤더 줄을 먼저 추가해야 합니다. 열 이름에 한글을 써도 그대로 JSON 키가 됩니다.
한 번에 처리할 수 있는 크기
변환은 브라우저 메모리 안에서 이루어집니다. 수천 행 정도는 문제없지만, 수십만 행짜리 로그나 수십 MB 데이터는 브라우저가 느려지거나 멈출 수 있습니다. 그 정도 크기는 명령줄 도구나 스크립트가 맞습니다. 이 도구는 API 응답 샘플을 표로 보거나, 설정 파일을 다른 형식으로 옮기거나, 스프레드시트 몇백 행을 JSON으로 바꾸는 용도에 맞춰져 있습니다.
YAML을 JSON으로 바꿀 때 사라지는 것
YAML에만 있는 기능은 JSON으로 가면서 펼쳐지거나 없어집니다.
- 주석은 전부 사라집니다. 설정 파일을 JSON으로 옮기면 왜 그 값인지 적어 둔 기록이 함께 사라지므로, 원본 YAML을 버리지 마세요.
- 앵커와 별칭(
&기본,*기본)은 참조가 풀려 같은 내용이 복사됩니다. 한 곳을 고치면 다른 곳도 바뀌던 구조가 각각 독립된 값이 됩니다. - 따옴표 없는 값은 YAML 규칙대로 해석됩니다.
0x1A는 26,1e3은 1000이 되고,2026-01-01은 문자열로 남습니다. 버전 번호1.10은 숫자 1.1이 되어 버리므로 따옴표로 감싸야 합니다.
반대로 JSON을 YAML로 바꾸면 중괄호와 따옴표가 사라지고 들여쓰기 구조만 남아 훨씬 짧아집니다. 값에 : 나 #가 들어 있으면 자동으로 따옴표가 붙어 뜻이 유지됩니다.
어떤 형식을 골라야 할까
API 응답이라면 JSON입니다. 표준이고 모든 언어가 기본 지원합니다.
사람이 손으로 편집하는 설정 파일이라면 YAML입니다. 주석을 달 수 있다는 점이 결정적입니다. 왜 이 값을 이렇게 두었는지 기록할 수 있습니다.
표 데이터를 주고받는다면 CSV입니다. 엑셀과 구글 시트에서 바로 열리고, 비개발자와 공유하기 좋습니다.
변환한 데이터는 서버로 가지 않습니다
모든 변환이 브라우저 안에서 이루어집니다. 사내 데이터나 고객 명단처럼 밖으로 나가면 곤란한 자료도 안심하고 붙여넣을 수 있습니다.
함께 확인하면 좋은 것
자주 묻는 질문
더 읽을 글
- JSON 파싱 오류 원인별 해결 — 브라우저마다 다른 메시지
크롬(V8)·파이어폭스(SpiderMonkey)·사파리(JavaScriptCore)가 같은 JSON 오류에 내는 실제 메시지를 원인별로 대조하고, 메시지에서 원인으로 역추적하는 법, HTML이 온 경우, 큰 정수가 바뀌는 문제, 오류 문구를 코드에서 다룰 때의 주의점을 정리했습니다.