이게 뭔가요?
CSV → JSON은 첫 줄을 헤더(키 이름)로 읽어 각 행을 객체로 만든 배열을 출력합니다. JSON → CSV는 객체 배열을 헤더가 있는 CSV로 바꿉니다. 따옴표·구분자·개행이 들어간 셀은 RFC 4180 규칙(큰따옴표로 감싸고, 안의 큰따옴표는 두 번 적기)으로 읽고 씁니다. 구분자는 쉼표·탭·세미콜론 중에서 고를 수 있고, 결과는 복사 버튼으로 가져갑니다. 파일로 내려받는 기능은 없습니다.
CSV → JSON 예제
아래 CSV를 입력 칸에 붙여넣으세요. 두 번째 행의 주소에는 쉼표가, 세 번째 행의 주소에는 줄바꿈이 들어 있고, 둘 다 큰따옴표로 감싸져 있습니다.
이름,나이,주소,우편번호
홍길동,30,"서울시 중구, 세종대로 110",04524
김영희,27,"부산시 해운대구
우동 1234",48094
기본 설정(숫자 자동 변환 끔)의 결과입니다. 모든 값이 문자열입니다.
[
{
"이름": "홍길동",
"나이": "30",
"주소": "서울시 중구, 세종대로 110",
"우편번호": "04524"
},
{
"이름": "김영희",
"나이": "27",
"주소": "부산시 해운대구\n우동 1234",
"우편번호": "48094"
}
]
쉼표가 든 주소는 한 칸으로 올바르게 묶였고 줄바꿈은 \n으로 들어갔습니다. 우편번호 04524도 앞자리 0이 살아 있습니다. 나이를 숫자로 받고 싶을 때만 숫자 자동 변환을 켜세요. 그러면 "나이": 30이 되고, 04524는 앞자리 0 때문에 문자열로 남으며 그 사실을 경고로 알려줍니다.
숫자 자동 변환의 규칙
옵션을 켰을 때 -12.5처럼 부호·정수·소수점만으로 이뤄진 값이 숫자가 됩니다. 단, 아래 경우는 숫자 모양이어도 문자열로 보존하고 경고를 띄웁니다.
- 앞자리가 0인 값 (
04524,007) — 우편번호·사번·전화번호처럼 자릿수가 의미 있는 식별자일 가능성이 높습니다. - 앞뒤 공백이 있거나
-0인 값 — 원래 표기를 유지합니다. - 유효숫자가 15자리를 넘는 소수·너무 작거나 큰 수 — 숫자로 바꿀 때 반올림되거나 0이 되는 것을 피합니다.
- 안전하게 표현할 수 없는 긴 정수 (절댓값이 9007199254740991, 즉 2^53 − 1보다 큰 값) — 자바스크립트 숫자로 바꾸면 끝자리가 바뀝니다.
| 입력 셀 | 옵션 끔 | 옵션 켬 | 비고 |
|---|---|---|---|
30 |
"30" |
30 |
정수 |
-3.14 |
"-3.14" |
-3.14 |
음수·소수 |
007 |
"007" |
"007" + 경고 |
앞자리 0 보존 |
04524 |
"04524" |
"04524" + 경고 |
앞자리 0 보존 |
0 |
"0" |
0 |
0 하나는 앞자리 0이 아님 |
0.5 |
"0.5" |
0.5 |
소수는 앞자리 0으로 보지 않음 |
42 |
" 42 " |
" 42 " + 경고 |
앞뒤 공백 보존 |
1,250,000 |
"1,250,000" |
"1,250,000" |
쉼표가 있으면 문자열 (쉼표 구분자면 따옴표로 감싸야 한 셀) |
1e5 |
"1e5" |
"1e5" |
지수 표기는 변환 안 함 |
+5 |
"+5" |
"+5" |
플러스 기호는 변환 안 함 |
true |
"true" |
"true" |
불리언 변환 없음 |
2026-10-05 |
"2026-10-05" |
"2026-10-05" |
날짜는 문자열 |
12345678901234567890 |
"12345678901234567890" |
"12345678901234567890" + 경고 |
2^53 − 1 초과, 정밀도 손실 방지 |
주문번호·카드번호처럼 자릿수가 긴 식별자는 옵션을 켜도 안전하게 문자열로 남습니다. 경고는 문자열로 보존한 값의 개수를 알려줍니다. 변환 결과는 그대로 사용할 수 있습니다.
변환을 멈추는 CSV 오류
아래 경우에는 오류가 있는 행 또는 열을 안내하고 결과를 비웁니다. 해당 위치를 고치면 다시 변환됩니다.
| 상황 | 동작 |
|---|---|
헤더 이름이 중복 (id,name,id) |
오류. 같은 키에 뒤 열 값이 덮어쓰이는 일을 막습니다 |
헤더가 빈 칸 (id,,name) |
오류. ""라는 키가 생기지 않습니다 |
| 행의 칸이 헤더보다 적음 | 오류. 그 행 번호가 표시됩니다 |
| 행의 칸이 헤더보다 많음 | 오류. 넘치는 값을 버리지 않습니다 |
| 여는 따옴표만 있고 닫는 따옴표 없음 | 오류. 그 뒤 전체가 한 셀로 흡수되지 않습니다 |
아래는 정상 처리되는 경우입니다.
| 상황 | 동작 |
|---|---|
줄 끝 \r\n(윈도우) |
한 번의 줄바꿈으로 읽음. 따옴표 안의 줄바꿈은 보존 |
| 마지막 행 끝의 줄바꿈 하나 | 빈 행을 추가하지 않음 |
따옴표 안의 "" |
큰따옴표 한 글자로 읽음 |
| 따옴표 안의 구분자·줄바꿈 | 셀 값의 일부로 읽음 |
| 탭·세미콜론 구분자 | 구분자 옵션을 바꾸면 쉼표와 같은 규칙으로 처리 |
빈 줄은 빈 셀 하나인 행으로 읽습니다. 열이 여러 개인 표에서는 열 수 불일치 오류가 나므로 불필요한 빈 줄을 지우세요.
JSON → CSV 예제
[
{ "id": 1, "name": "홍길동", "tags": ["a", "b"], "memo": null },
{ "id": 2, "name": "김영희", "email": "kim@example.com", "active": true }
]
쉼표 구분자 결과입니다.
id,name,tags,memo,email,active
1,홍길동,"[""a"",""b""]",,,
2,김영희,,,kim@example.com,true
- 열은 등장 순서대로 모읍니다. 첫 객체의
id, name, tags, memo뒤에 두 번째 객체에서 처음 나온email, active가 붙습니다. - 객체에 없는 키와
null은 빈 칸이 됩니다. 그래서 어느 쪽이 null이었고 어느 쪽이 키 자체가 없었는지는 CSV에서 구분할 수 없습니다. - 배열·중첩 객체는 JSON 문자열 그대로 한 칸에 들어갑니다.
["a","b"]는 큰따옴표가 들어 있으니 RFC 4180대로"[""a"",""b""]"로 감쌉니다. 중첩 구조를 열로 펼치는 기능은 없습니다. - 불리언은
true/false문자열이 됩니다. - 값에 구분자·큰따옴표·줄바꿈이 들어 있으면 큰따옴표로 감쌉니다. 구분자를 탭이나 세미콜론으로 바꾸면 그 문자가 든 값이 감싸집니다.
오류와 제한
JSON → CSV는 객체 배열만 받습니다. 그 외 모양은 오류로 멈춥니다.
| 입력 | 결과 |
|---|---|
{ "a": 1 } (객체 하나) |
오류. [ { "a": 1 } ]로 감싸세요 |
[1, 2, 3] (객체가 아닌 요소) |
오류. 모든 요소를 객체로 바꿔야 합니다 |
[ {"a": 1}, [2, 3] ] (배열이 섞임) |
오류. 배열 요소도 객체가 아닙니다 |
[] (빈 배열) |
빈 결과 |
| 문법이 틀린 JSON | 오류. 위치를 찾으려면 JSON Formatter에 먼저 넣어 보세요 |
JSON 숫자는 입력 단계에서 이미 바뀔 수 있습니다
JSON → CSV는 입력을 브라우저의 JSON.parse로 읽습니다. 그래서 JSON 본문에 따옴표 없이 적힌 숫자가 9007199254740991(2^53 − 1)보다 크면, 변환기가 손대기 전에 파싱 단계에서 끝자리가 바뀝니다.
| 입력 JSON | CSV 결과 | 이유 |
|---|---|---|
[{"id": 12345678901234567890}] |
12345678901234567000 |
숫자로 적혀 있어 파싱 때 정밀도 손실 |
[{"id": "12345678901234567890"}] |
12345678901234567890 |
문자열로 적혀 있어 그대로 보존 |
CSV → JSON의 긴 숫자 보존 규칙은 CSV 셀을 읽을 때 적용되는 것이라, JSON 쪽 입력에는 미치지 않습니다. 긴 ID를 다루는 API 응답을 CSV로 바꿀 때는 원본 JSON에서 그 값이 문자열인지 먼저 확인하세요. 숫자로 되어 있다면 이 도구뿐 아니라 자바스크립트로 JSON을 읽는 모든 곳에서 같은 일이 일어납니다.
엑셀과 주고받는 가장 쉬운 방법
- 엑셀·구글 시트에서 범위를 복사하면 탭 구분 텍스트가 클립보드에 들어갑니다.
- CSV 구분자를 탭으로 바꾸고 붙여넣으면 CSV → JSON이 그대로 됩니다. 쉼표가 든 주소도 따옴표 처리 없이 안전합니다.
- 반대로 JSON → CSV 결과도 구분자를 탭으로 두고 복사하면 시트의 셀에 바로 붙여넣을 수 있습니다.
결과를 메모장 등에 붙여넣어 .csv로 저장해 엑셀로 열어야 한다면, 텍스트가 UTF-8이라는 점을 기억하세요. 한국어 윈도우 엑셀은 .csv를 더블클릭하면 다른 코드페이지로 읽어 한글이 깨질 수 있습니다. 데이터 → 텍스트/CSV 가져오기에서 파일 원본을 65001: 유니코드(UTF-8)로 지정하면 정상적으로 열립니다. 유럽권 엑셀처럼 소수점이 쉼표인 환경에서는 CSV 구분자가 세미콜론이므로 옵션에서 ;를 고르세요.
한계
- 헤더 없는 CSV를 배열의 배열(
[["a","b"],…])로 바꾸는 모드는 없습니다. 첫 줄은 항상 헤더로 봅니다. - 오류가 난 행을 건너뛰고 나머지만 변환하는 옵션은 없습니다. 멈춘 위치를 고쳐야 결과가 나옵니다.
- JSON → CSV에서 열 순서를 직접 지정하거나 특정 키만 고르는 기능은 없습니다. 변환 전에 원본 JSON에서 키를 정리하세요. 마크다운·SQL 출력은 표 변환기를 이용할 수 있습니다.
- 결과를 파일로 내려받는 버튼은 없습니다. 복사해서 붙여넣는 흐름만 지원합니다.
- 변환은 입력할 때마다 전체를 다시 계산하므로 수만 행 이상에서는 입력이 느려질 수 있습니다.