CSV ↔ JSON 변환기 (RFC 4180, 탭·세미콜론)

엑셀에서 복사한 표나 CSV 파일 내용을 붙여 넣으면 JSON 객체 배열로 바꿔 주고, 반대로 API 응답 JSON을 스프레드시트에 넣을 수 있는 CSV로 만듭니다. 값 안에 쉼표나 줄바꿈이 있어도 따옴표 규칙대로 정확히 나눕니다.

CSV ↔ JSON 변환기 (RFC 4180, 탭·세미콜론)모두의계산기

CSV의 따옴표 규칙 (RFC 4180)

CSV는 "쉼표로 나눈 텍스트"로 보이지만 값 안에 쉼표·줄바꿈·따옴표가 들어갈 수 있어서 단순 split(',')로는 깨집니다. RFC 4180이 정한 규칙은 세 가지입니다. 값에 구분자, 줄바꿈, 큰따옴표가 있으면 값 전체를 큰따옴표로 감싼다. 값 안의 큰따옴표는 두 번 겹쳐 ""로 쓴다. 따옴표로 감싼 값 안의 줄바꿈은 행 구분이 아니라 값의 일부다. 이 도구는 이 규칙대로 한 글자씩 읽는 상태 기계 파서를 직접 구현했으므로 "서울, 강남"은 한 칸이고, "그는 ""안녕""이라 했다"그는 "안녕"이라 했다로 풀립니다. 모든 변환은 브라우저 안에서 끝나며 데이터가 전송되지 않습니다.

구분자 자동 감지

앞 5줄에서 쉼표·탭·세미콜론·파이프 중 가장 많이 나오는 문자를 구분자로 잡습니다. 엑셀에서 셀을 복사해 붙여 넣으면 탭으로 구분되므로 그대로 인식되고, 유럽식 설정(소수점이 쉼표)의 엑셀이 내보낸 CSV는 세미콜론이 잡힙니다. 값 안에 쉼표가 많은 데이터는 감지가 틀릴 수 있으니 그때는 구분자를 직접 지정하세요. 열 개수가 행마다 다르다는 경고가 뜨면 구분자를 먼저 의심하는 것이 좋습니다.

숫자 자동 변환의 함정

"숫자처럼 보이는 값은 숫자로"를 켜면 30은 JSON 숫자 30이 되고 true/false/null도 해당 타입으로 바뀝니다. 그러나 01012345678(전화번호), 00123(앞에 0이 있는 코드)은 숫자로 바꾸면 앞자리가 사라지므로 문자열로 유지하고, 16자리 이상 숫자(카드번호, 큰 ID)도 자바스크립트 정밀도 한계 때문에 문자열로 둡니다. 우편번호·사번처럼 "숫자 모양이지만 계산하지 않는 값"이 많은 데이터라면 이 옵션을 끄는 편이 안전합니다.

JSON → CSV에서 열이 정해지는 방식

객체 배열이면 모든 객체의 키를 등장 순서대로 모아 열로 씁니다. 어떤 객체에 없는 키는 빈 칸이 됩니다. 배열의 배열이면 헤더 없이 행을 그대로 씁니다. 중첩된 객체({"address":{"city":"서울"}})는 한 칸에 JSON 문자열로 들어가므로, 평평한 표가 필요하면 변환 전에 구조를 펼쳐야 합니다. 출력 줄바꿈은 규격대로 CRLF이며 엑셀·구글 시트 모두 문제없이 엽니다. 엑셀에서 한글이 깨지는 것은 CSV 자체가 아니라 엑셀이 인코딩을 추측하는 방식 때문이니, UTF-8 BOM으로 저장하거나 "데이터 가져오기" 메뉴를 쓰면 해결됩니다.

자주 묻는 질문

엑셀에서 복사한 표를 바로 넣어도 되나요?

네. 엑셀은 클립보드에 탭 구분 텍스트를 넣으므로 자동 감지가 탭으로 잡습니다. 셀 안에 줄바꿈이 있는 경우 엑셀이 따옴표로 감싸 주므로 정확히 파싱됩니다.

헤더 이름이 중복돼요.

같은 열 이름이 여러 개면 두 번째부터 _2, _3을 붙입니다. 빈 헤더는 col1, col2처럼 자동으로 채웁니다.

큰 파일도 되나요?

수만 행 정도는 문제없이 처리되지만 브라우저 textarea에 붙여 넣는 과정이 느릴 수 있습니다. 수십 MB 이상이면 명령줄 도구(Python csv 모듈, jq, Miller)가 맞습니다.

함께 보기