본문 바로가기

로딩 중...


CSV → JSON 변환기

거래처에서 받은 표를 코드에서 다루려다 보면 결국 벽에 부딪힙니다. 엑셀이나 CSV로 온 2차원 표는 사람이 보기엔 편하지만, 막상 코드에서 반복 처리하려면 [{ name: "...", price: ... }] 같은 객체 배열이 훨씬 손에 잡히죠. CSV → JSON 변환기는 이 표를 헤더를 키로 삼은 JSON 객체 배열로 한 번에 바꿔 주는 도구입니다.

한두 줄이면 손으로 쳐도 되지만, 수백 행짜리 상품 목록이나 회원 명단을 매번 손으로 옮기는 건 실수만 늘 뿐이었습니다. 따옴표 안에 든 쉼표 하나 잘못 세면 열이 통째로 밀리고요. 그 지겨운 왕복을 없애려고, 붙여넣으면 바로 JSON이 나오는 걸 만들었습니다.

사용 방법

  1. 왼쪽 입력창에 CSV를 붙여넣습니다. 첫 줄이 헤더로 자동 인식되어 각 열의 키가 됩니다. 파일이 있으면 드래그하거나 파일 선택으로 올려도 되고, 감이 안 오면 샘플 버튼으로 예시부터 시작하세요.

    CSV → JSON 변환기-guide-1

  2. 가운데 화살표를 누르면 JSON으로 변환됩니다. 입력을 멈추면 잠깐 뒤 자동으로도 변환되니, 값을 고치면서 결과가 어떻게 바뀌는지 바로 확인할 수 있습니다. 오른쪽 위에 행 수도 표시됩니다.

    CSV → JSON 변환기-guide-2

  3. 오른쪽에 나온 JSON을 복사해 코드에 그대로 붙여넣으세요. 파일로 내려받고 싶으면 다운로드 버튼을 쓰면 됩니다.

    CSV → JSON 변환기-guide-3

CSV와 JSON은 왜 근본적으로 다른가

CSV는 행과 열로만 이루어진 평평한 표입니다. 칸 하나에는 값 하나가 들어갈 뿐, 그 안에 또 다른 표를 품을 수 없죠. 반면 JSON은 객체 안에 객체, 배열 안에 객체를 얼마든지 겹쳐 담습니다. 이 차이가 두 형식을 오갈 때 대부분의 골칫거리를 만듭니다.

예를 들어 한 주문 안에 상품이 여러 개 들어 있는 구조를 CSV로 억지로 펴면 방법은 둘뿐입니다. 주문 정보를 상품 개수만큼 똑같이 반복해 여러 행으로 늘리거나, item1_name, item2_name처럼 열을 계속 늘리거나. 앞쪽은 데이터가 뻥튀기되고, 뒤쪽은 상품이 몇 개까지 올지 몰라 열이 폭발합니다. 계층이 깊은 데이터일수록 CSV는 점점 감당하기 어려워집니다.

그래서 보통 어떻게 쓰나

표준 방식은 단순합니다. 첫 행의 각 셀을 키로 쓰고, 나머지 각 행을 그 키에 값을 채운 객체 하나로 만들어 배열에 담습니다. 헤더가 name,email,age라면 각 행은 { "name": "...", "email": "...", "age": "..." }가 되는 식이죠.

중첩이 필요하면 헤더에 점 표기법을 씁니다. customer.name, customer.tier처럼 열 이름에 점을 넣으면 변환기가 이를 customer 객체 아래로 묶어 줍니다. 이 도구는 이 점 표기법을 그대로 이해해서, 평평한 CSV 열을 다시 계층 구조로 접어 JSON을 만듭니다. 오른쪽 Flatten 토글을 끄고 켜면서 펼친 상태와 접은 상태를 오가며 확인할 수도 있습니다.

한 가지 기억할 점은, CSV의 값은 본래 전부 문자열이라는 것입니다. age 열에 30이 들어 있어도 표에서는 숫자 30인지 문자열 "30"인지 구분이 없습니다. 변환된 JSON을 코드에서 받아 쓸 때 숫자나 불리언이 필요하다면, 그 형 변환은 받는 쪽에서 한 번 더 챙겨야 뒤늦은 버그를 피할 수 있습니다.

자주 묻는 질문

CSV 파일의 첫 줄이 제목이 아니면 어떻게 되나요?

첫 번째 줄의 텍스트를 기준으로 JSON 키 값이 생성되므로, 제목이 없다면 데이터의 첫 번째 값이 키가 되어버립니다. 반드시 첫 줄에 컬럼명을 배치해 주세요.

엑셀에서 만든 CSV의 한글이 깨져요.

윈도우 엑셀은 보통 EUC-KR 인코딩을 사용합니다. 도구 하단의 '읽기 인코딩' 설정을 EUC-KR로 변경하시면 한글이 정상적으로 표시됩니다.

데이터 용량 제한이 있나요?

사용자의 브라우저 성능에 따라 다르지만, 일반적인 수만 행의 데이터는 무리 없이 변환됩니다. 단, 수십만 행 이상의 대용량은 브라우저 환경에 따라 일시적인 멈춤이 있을 수 있습니다.