CSV ↔ JSON 변환기

스프레드시트 데이터를 JSON 배열로, JSON 배열을 다시 표 데이터로 바꿔보세요.

CSV → JSON

JSON → CSV

CSV와 JSON은 무엇이 다른가요?

CSV(Comma-Separated Values)는 "한 줄이 한 행, 쉼표가 열 경계"라는 단순한 약속으로 표를 글자만으로 표현하는 형식입니다. 열의 이름은 보통 첫 줄에만 적고, 모든 값은 원칙적으로 글자(텍스트)입니다. 반면 JSON은 키와 값의 쌍으로 데이터를 적고, 값이 문자열인지 숫자인지 true/false인지, 심지어 또 다른 객체나 배열인지까지 구분해서 적는 형식입니다. 그래서 엑셀·구글 시트·회계 프로그램이 내려받는 표는 대부분 CSV이고, 웹 API·설정 파일·프로그램 사이의 데이터 교환은 대부분 JSON입니다. 이 도구는 두 세계를 오가는 다리 역할을 합니다.

변환의 핵심 규칙은 하나입니다. CSV의 첫 줄을 키(key)로 삼고, 그 아래 각 줄을 하나의 객체로 만들어 배열에 담습니다. 아래는 가장 단순한 예입니다.

이름,나이,직급
홍길동,32,과장
김민준,28,대리

이 데이터는 다음 JSON 배열이 됩니다(나이는 숫자로 인식됩니다).

[
  {
    "이름": "홍길동",
    "나이": 32,
    "직급": "과장"
  },
  {
    "이름": "김민준",
    "나이": 28,
    "직급": "대리"
  }
]

쉼표가 들어 있는 셀과 줄바꿈이 들어 있는 셀

CSV에서 가장 흔한 사고는 "값 안에 쉼표가 있는 경우"입니다. 주소 "서울시 강남구, 역삼동"을 그냥 적으면 쉼표 때문에 두 칸으로 쪼개집니다. 이를 막는 표준 규칙(RFC 4180)은 다음과 같습니다.

이 변환기는 위 규칙을 그대로 구현했습니다. 다음 CSV는 3개 열, 1개 데이터 행으로 정확히 읽힙니다.

상품,설명,가격
"볼펜, 검정","굵기 0.7mm
""고급형""",1200
[
  {
    "상품": "볼펜, 검정",
    "설명": "굵기 0.7mm\n\"고급형\"",
    "가격": 1200
  }
]

단순히 줄 단위로 쪼개고 쉼표로 자르는 간이 변환기는 이 입력에서 열 개수가 어긋나는 결과를 내놓습니다. 변환 결과 위에 표시되는 "열 개수가 다른 행" 경고는 바로 이런 문제를 알아차리게 하려는 장치입니다. 데이터 행의 칸 수가 헤더와 다르면 몇 번째 줄인지 알려 주고, 모자란 칸은 빈 문자열로 채우며 남는 칸은 버립니다.

숫자·불리언 자동 인식은 어떻게 판단하나요?

"숫자·true/false 자동 인식"을 켜면 각 셀을 아래 규칙으로 판정합니다. 자바스크립트의 느슨한 숫자 변환(Number)을 그대로 쓰면 "0x1F"가 31로, "1e3"이 1000으로, 빈 칸 비슷한 값이 0으로 바뀌는 등 의도치 않은 변환이 생기기 때문에, 이 도구는 더 엄격한 규칙을 씁니다. 아래 표는 규칙을 실제 함수에 넣어 계산한 결과입니다.

셀 원문JSON 출력판정
3232숫자
-4.5-4.5숫자
0.750.75숫자
007"007"문자열
01012345678"01012345678"문자열
1e3"1e3"문자열
0x1F"0x1F"문자열
12345678901234567890"12345678901234567890"문자열
truetrue불리언
TRUE"TRUE"문자열
falsefalse불리언
null"null"문자열
1,200"1,200"문자열
3.14.15"3.14.15"문자열

요약하면 "-12", "3.5"처럼 앞에 불필요한 0이 없고 소수점이 하나뿐인 십진수만 숫자가 됩니다. 앞자리 0이 있는 "007"과 전화번호 "01012345678", 15자리를 넘어 정밀도가 깨질 수 있는 긴 숫자, 천 단위 쉼표가 있는 "1,200"은 모두 문자열로 남습니다. true/false는 소문자 그대로일 때만 불리언이 되며, "TRUE"나 "null"은 문자열입니다. 전부 문자열로 받고 싶다면 체크를 해제하세요.

엑셀·구글 시트 데이터를 바로 붙여넣는 방법

엑셀이나 구글 시트에서 셀 범위를 복사하면 열 사이가 탭 문자로 구분된 텍스트가 클립보드에 담깁니다(TSV). 첫 입력창에 그대로 붙여넣으면 "자동 감지"가 첫 줄을 훑어 탭, 쉼표, 세미콜론 중 가장 많이 나오는 문자를 구분자로 고릅니다. 이때 따옴표 안에 든 쉼표는 세지 않습니다. 유럽식 설정의 엑셀은 쉼표가 소수점으로 쓰여서 CSV 구분자로 세미콜론을 쓰는 경우가 많은데, 이것도 자동 감지로 처리됩니다. 첫 줄이 한 칸짜리 헤더여서 구분자 후보가 하나도 없다면 쉼표로 간주하므로, 그 경우에는 구분자를 직접 지정하세요.

반대로 JSON을 엑셀에 옮길 때는 "출력 구분자"를 탭으로 바꿔 변환하고 결과를 복사해 셀에 붙여넣으면 열이 알아서 나뉩니다. 파일로 저장하려면 "엑셀용 CSV 파일 저장"을 쓰세요. 이 버튼은 파일 맨 앞에 UTF-8 BOM(바이트 순서 표시)을 붙입니다. BOM이 없으면 한국어 윈도우의 엑셀이 UTF-8 CSV를 CP949로 잘못 해석해 한글이 깨져 보이는 일이 흔합니다.

JSON → CSV에서 알아둘 점

왕복 변환이 완전히 같지 않은 경우

CSV → JSON → CSV로 돌리면 대체로 원본과 같지만, 몇 가지는 달라질 수 있습니다. 숫자 "1.0"은 자동 인식으로 1이 되어 소수점 표기가 사라지고, 앞뒤 공백 제거를 켜 두면 " 홍길동 "의 공백이 없어지며, 빈 칸은 null이 아닌 빈 문자열로 남습니다. 값의 모양까지 그대로 보존해야 하는 작업(우편번호, 계좌번호, 사번 등)이라면 자동 인식을 끄고 변환하세요.

이 도구를 쓰기 전에 점검할 흔한 실수

이 도구가 적합하지 않은 경우

수십 MB가 넘는 대용량 파일은 브라우저 메모리와 텍스트 영역 한계 때문에 느려지거나 멈출 수 있으므로 스크립트나 전용 도구가 낫습니다. 열마다 서로 다른 타입을 강제해야 하거나(예: 이 열만 날짜로), 계층 구조 JSON을 점 표기법으로 펼쳐야 하는 작업도 범위를 벗어납니다. 또한 이 변환기는 입력한 내용을 서버로 보내지 않고 브라우저 안에서만 처리하지만, 개인정보나 기밀 데이터를 공용 PC에서 다룰 때는 작업 후 입력창을 비우는 습관을 들이세요.

변환한 뒤 무엇을 하나요?

만들어진 JSON은 웹 API 테스트 도구에 요청 본문으로 넣거나, 프로그램의 목업 데이터로 쓰거나, 설정 파일에 넣을 수 있습니다. 문법이 맞는지 다시 확인하거나 보기 좋게 들여쓰려면 JSON 포맷터를, 설정 파일용 YAML이 필요하면 YAML ↔ JSON 변환기를 이어서 쓰면 됩니다. 엑셀 안에서 한 칸의 내용을 열로 나누는 방법은 엑셀 텍스트 나누기 가이드에, 텍스트 표를 줄 맞춰 보여 주는 용도는 텍스트 표 정렬기에 정리돼 있습니다. 변환 전후의 차이를 확인하고 싶다면 텍스트 비교 도구가 도움이 됩니다.

자주 묻는 질문

중첩된 객체나 배열이 있으면 어떻게 되나요?

CSV로 변환할 때 값이 객체나 배열이면 JSON 문자열 형태로 그대로 하나의 셀에 담습니다. 완전히 펼쳐진 표 형태가 필요하다면 별도의 스프레드시트 도구로 추가 가공하는 것이 더 정확합니다.

행마다 열(키) 구성이 다른 JSON도 CSV로 바꿀 수 있나요?

네. 모든 객체에 등장하는 키를 모아 하나의 헤더로 만들고, 특정 객체에 없는 키는 빈 칸으로 채워 표를 완성합니다.

따옴표로 감싼 셀 안에 쉼표나 줄바꿈이 있어도 되나요?

됩니다. 큰따옴표 안의 쉼표·탭·줄바꿈은 구분자나 행의 끝이 아니라 값의 일부로 읽습니다. 값 안의 큰따옴표는 두 번 겹쳐 적은 형태("")를 큰따옴표 한 개로 복원합니다. 따옴표가 닫히지 않은 채 끝나면 오류로 알려 드립니다.

전화번호나 우편번호의 앞자리 0이 사라져요.

"숫자·true/false 자동 인식"을 해제하세요. 다만 이 도구의 자동 인식은 "007", "01012345678"처럼 앞자리 0이 있는 값을 이미 문자열로 두므로 대부분 보존됩니다. 그래도 사라졌다면 엑셀에서 저장할 때 이미 지워진 것입니다.

엑셀로 CSV를 열면 한글이 깨집니다.

UTF-8 BOM이 없는 CSV를 한국어 윈도우 엑셀이 다른 인코딩으로 읽어서 생기는 현상입니다. "엑셀용 CSV 파일 저장" 버튼으로 받은 파일은 BOM이 붙어 있어 대개 정상적으로 열립니다. 복사해서 붙여넣는 방식이라면 구분자를 탭으로 바꿔 직접 셀에 붙여넣는 것이 가장 간단합니다.

데이터가 서버로 전송되나요?

아니요. 모든 변환은 열려 있는 브라우저 탭 안에서 자바스크립트로만 이뤄지며, 입력한 내용은 저장되지 않습니다.