CSV JSON 변환기

CSV와 JSON을 양방향으로 변환해요. 구분자 자동 감지, 헤더 행, 타입 변환을 지원하고 큰 ID나 앞자리 0도 그대로 유지돼요. 무료, 회원가입 없음, 데이터 업로드 없음.

  • 양방향 변환
  • 구분자 자동 감지
  • 큰 숫자도 정확하게
  • 엑셀 한글 깨짐 방지

데이터는 브라우저 안에서만 변환되며 업로드되거나 저장되지 않아요.

🔒 모든 계산은 브라우저 안에서 이뤄지며 데이터는 어떤 서버에도 업로드되지 않아요.

이럴 때 쓰면 좋아요

  • 엑셀 데이터를 개발자에게: 엑셀에서 저장한 CSV를 JSON으로 바꿔 웹페이지나 API에 바로 써요.
  • API 결과를 보고서로: API가 돌려준 JSON 배열을 CSV로 바꿔 엑셀이나 Google 스프레드시트에서 분석해요.
  • 시스템에 넣기 전 확인: 필드와 구분자를 점검해 007이나 010으로 시작하는 전화번호의 앞자리 0이 사라지는 일을 막아요.
  • 스프레드시트에서 바로 붙여넣기: 스프레드시트에서 복사한 셀은 탭으로 구분되어 있어 붙여 넣으면 자동으로 감지해 변환해요.

사용 방법

  1. 변환 방향(CSV → JSON 또는 JSON → CSV)을 고르고 데이터를 ‘입력’에 붙여 넣거나 ‘파일 열기’로 .csv, .tsv, .json 파일을 불러와요. 결과는 바로 ‘출력’에 나타나요.
  2. 필요하면 옵션을 바꿔요. 구분자는 자동 감지하거나 직접 지정할 수 있고, ‘첫 행을 헤더로’는 CSV 첫 행을 필드 이름으로 쓰며, ‘타입 변환’은 숫자와 true/false를 JSON 숫자와 불리언으로 바꿔요.
  3. ‘복사’나 ‘다운로드’로 결과를 받아요. 엑셀에서 CSV를 열 거라면 ‘BOM 추가’를 켜 두세요. ‘바꾸기’를 누르면 출력을 입력으로 옮겨 반대로 변환해 확인할 수 있어요.

사용 예시

CSV → JSON(헤더와 타입 변환 켬): 헤더 id,name,price,active와 9007199254740993,Amy,1200.50,true, 007,Ben,300,false 두 행을 넣으면 2행 × 4열이 돼요. 300은 숫자, true와 false는 불리언이 되지만, 안전한 정수 범위를 넘는 9007199254740993, 앞자리가 0인 007, 끝자리가 0인 1200.50은 문자열로 남아 CSV로 되돌려도 그대로예요.

JSON → CSV: [{"name":"Amy","tags":["a","b"]},{"name":"Ben","email":"ben@example.com"}]를 넣으면 두 레코드 키의 합집합인 name, tags, email이 열이 되어 2행 × 3열이 돼요. Amy에는 email이, Ben에는 tags가 없어 해당 셀은 비어 있어요. tags 배열은 JSON 문자열이 되고, 쉼표와 따옴표가 있어 CSV에서는 "[""a"",""b""]"로 기록돼요.

결과 해석

  • 상태 표시줄의 ‘행 × 열’은 데이터 행 수이며 헤더 행은 포함하지 않아요. CSV의 빈 줄은 건너뛰고 세지 않아요.
  • ‘필드 수가 헤더와 맞지 않음’이 나오면 헤더보다 필드가 많거나 적은 행이 있다는 뜻이에요. 대부분 값에 쉼표가 있는데 따옴표로 감싸지 않은 경우예요. 필드가 부족한 행은 뒤쪽 키가 빠지고, 남는 값은 __parsed_extra에 들어가요.
  • ‘타입 변환’을 끄면 JSON 값은 모두 문자열이에요. 켜더라도 숫자와 true/false만 바꾸며, 빈 셀은 빈 문자열, 날짜는 문자열 그대로예요.
  • 헤더에 같은 이름이 있으면 자동으로 이름을 바꿔요. 예를 들어 a가 두 개면 a와 a_1이 되어 뒤 열이 앞 값을 덮어쓰지 않아요.

원리와 계산 방법

  • CSV 파싱과 출력은 papaparse를 사용하며 따옴표 규칙은 RFC 4180을 따라요. 구분자, 따옴표, 줄바꿈이 있는 필드는 큰따옴표로 감싸고, 안의 따옴표는 두 번 써요. 출력 줄바꿈은 CRLF예요.
  • 구분자 자동 감지는 쉼표, 탭, 세로줄, 세미콜론 중 각 행의 필드 수가 가장 일정한 것을 골라요. 열이 하나뿐이면 판단할 수 없어 쉼표로 처리해요.
  • 타입 변환 규칙: 숫자로 바꿨다가 글자로 되돌린 결과가 원문과 똑같고, 정수라면 ±(2^53−1)의 안전 범위 안에 있을 때만 숫자로 바꿔요.
  • JSON → CSV: 객체 배열은 모든 키의 합집합(처음 나온 순서)을 열로 쓰고, 2차원 배열은 한 행씩 그대로 출력하며, 값만 있는 배열은 value 열에 넣어요. 안전 범위를 넘는 정수는 파싱 전에 원래 글자를 보존하므로 반올림되지 않아요.
  • 파일은 먼저 UTF-8로 읽고, 올바른 UTF-8이 아니면 Big5로 다시 읽어요.

한계와 주의점

  • 평평한 표만 지원해요. 중첩 JSON을 user.name 같은 여러 열로 펼치지 않고, 객체 전체를 JSON 문자열로 한 셀에 넣어요.
  • 구분자 자동 감지는 행마다 필드 수가 같다는 전제가 필요해요. 데이터가 적거나 필드 수가 들쭉날쭉하면 틀릴 수 있으니 직접 고르세요.
  • 자동으로 인식하는 인코딩은 UTF-8과 Big5뿐이에요. EUC-KR 등 다른 인코딩 파일은 먼저 UTF-8로 저장해 주세요.
  • 모든 데이터를 브라우저 메모리에서 처리하므로 수십 MB 이상의 파일은 페이지가 느려질 수 있어요.

자주 묻는 질문

007이나 1.50은 왜 숫자로 바뀌지 않나요?

‘타입 변환’은 숫자로 바꿨다가 다시 글자로 돌렸을 때 원래와 똑같은 값만 변환해요. 007은 7이, 1.50은 1.5가 되어 코드나 금액 형식이 망가지기 때문에 문자열로 남겨 두고, CSV로 되돌려도 내용이 바뀌지 않게 해요.

다운로드한 CSV를 엑셀에서 열면 한글이 깨져요.

‘BOM 추가’를 켜고 다운로드하세요. BOM은 파일 맨 앞의 보이지 않는 표시로, 엑셀은 이것을 보고 UTF-8로 읽어요. 참고로 UTF-8이 아닌 CSV를 열면 Big5(번체 중국어)로 해석하며, EUC-KR 파일은 먼저 UTF-8로 다시 저장해 주세요.

JSON의 중첩 객체나 배열은 CSV에서 어떻게 되나요?

CSV는 평평한 표라서 중첩 객체나 배열은 ["a","b"]처럼 JSON 문자열로 한 셀에 들어가요. 레코드마다 키가 다르면 모든 키의 합집합을 열로 쓰고, 값이 없는 셀은 비워 둬요.

데이터가 업로드되나요?

아니요. 파싱과 변환은 모두 브라우저 안에서 이루어지며, 서버로 전송하거나 저장하지 않아요. 페이지를 닫으면 데이터도 사라져요.

엑셀을 JSON으로 바꾸려면 어떻게 하나요?

엑셀에서 ‘다른 이름으로 저장 → CSV UTF-8(쉼표로 분리)’을 고른 뒤 ‘파일 열기’로 불러오거나, 셀을 선택해 복사한 뒤 붙여 넣고 변환 방향을 ‘CSV → JSON’으로 고르면 돼요.

Google 스프레드시트도 바로 쓸 수 있나요?

네. 범위를 선택해 복사한 뒤 바로 붙여 넣거나(탭 구분은 자동 감지), ‘파일 → 다운로드 → 쉼표로 구분된 값(.csv)’으로 CSV를 받아 열면 돼요.

변환된 JSON은 어떤 모양인가요?

‘첫 행을 헤더로’를 체크하면 각 행이 필드 이름을 키로 하는 객체가 되어 전체가 객체 배열이 돼요. 체크를 해제하면 각 행이 하나의 배열이 돼요.

참고 자료