한국어

CSV JSON 변환 — CSV를 JSON 배열로 바꾸기

CSV를 JSON으로 변환 (구분자 자동 감지, 헤더, 타입 변환, 중첩 복원)

브라우저에서 처리 · 서버로 전송되지 않음

소개

CSV는 엑셀이나 데이터베이스에서 내보낸 표를 주고받는 가장 흔한 형식이고, 웹 개발에서는 보통 JSON이 필요합니다. 이 도구는 붙여 넣은 CSV를 JSON으로 바꿔 줍니다. 헤더를 키로 쓰는 객체 배열이 기본이고, 헤더가 없는 데이터는 배열의 배열로 만들 수 있습니다.

사용법

  1. CSV 전체를 입력 칸에 붙여 넣거나 CSV 파일 열기로 파일을 엽니다. 한국어 엑셀의 ‘CSV(쉼표로 분리)’ 파일(EUC-KR)도 그대로 열립니다.
  2. 구분자는 자동 감지에 맡기거나 직접 고릅니다. 첫 행이 헤더가 아니면 해당 옵션을 끕니다.
  3. 숫자와 true/false를 JSON 타입으로 받으려면 변환 옵션을 켭니다.
  4. address.city 같은 열을 {"address":{"city":...}}로 되돌리고 싶다면 중첩 복원을 켭니다. JSON 변환기에서 만든 CSV를 되돌릴 때 유용합니다.
  5. 들여쓰기를 고르고 복사합니다.

기준

  • CSV 파싱은 RFC 4180을 따릅니다. 큰따옴표로 감싼 값 안의 구분자와 줄바꿈은 값의 일부이고, 큰따옴표 두 개는 하나로 읽습니다. 완전히 빈 줄은 건너뜁니다.
  • 타입 변환은 true, false(소문자만)와 -12, 3.5, 1e3 같은 10진수 표기에만 적용합니다. 007, +1, 1e999, 9007199254740991을 넘는 정수는 문자열로 유지합니다. 빈 칸은 빈 문자열입니다.
  • 같은 이름의 헤더가 있으면 두 번째부터 name_2, name_3으로 바꿔 열이 사라지지 않게 합니다.
  • 중첩 복원: 점으로 나뉜 헤더를 객체로 쌓고, [나 {로 시작하면서 올바른 JSON인 칸은 배열·객체로 풀어 줍니다. 이미 값이 있는 키와 충돌하면 점이 든 키를 그대로 둡니다.
  • 입력 앞의 UTF-8 BOM은 제거합니다.

예시

입력:

이름,나이,주소.시
홍길동,30,서울

결과(변환 옵션과 중첩 복원 켬):

[{"이름": "홍길동", "나이": 30, "주소": {"시": "서울"}}]

참고

  • 전화번호나 우편번호처럼 앞자리 0이 중요한 열은 타입 변환을 켜도 문자열로 남습니다. 숫자로 바꾸고 싶다면 변환 후 직접 처리하세요.
  • 헤더가 없는 CSV는 헤더 옵션을 끄면 [["홍길동","30"],...] 형태의 배열의 배열로 나옵니다.
  • 왕복 변환의 한계: 빈 칸은 null이 아니라 빈 문자열("")로 나옵니다. 또 타입 변환을 켜면 "123" 같은 숫자 문자열이 숫자 123으로 바뀌므로, JSON에서 CSV로 갔다가 돌아오면 원본과 달라질 수 있습니다.
  • 매우 큰 파일은 브라우저 메모리를 쓰므로 수십 MB 이상이면 나눠서 변환하세요.

자주 겪는 경우

  • 엑셀 한국어 버전에서 저장한 CSV는 구분자가 쉼표인 경우가 많지만, 유럽식 설정에서는 세미콜론일 수 있습니다. 자동 감지가 틀리면 구분자를 직접 고르세요.
  • 행마다 칸 수가 다르면 변환은 계속하되 몇 번째 행이 문제인지 알려 줍니다. 헤더보다 모자란 행은 뒤쪽 키가 빠지고, 넘치는 칸은 결과에 담기지 않으니 원본을 확인하세요.
  • 값 안에 줄바꿈이 있는 CSV는 큰따옴표로 감싸져 있어야 한 칸으로 읽힙니다. 따옴표가 없으면 다음 행으로 오해합니다.
  • 헤더에 한글이나 공백이 있어도 그대로 키가 됩니다. 코드에서 쓰기 쉽게 하려면 변환 전에 헤더를 영문으로 바꿔 두세요.
  • TRUE, True처럼 대문자가 섞인 값은 불리언으로 바꾸지 않고 문자열로 둡니다.

활용 팁

  • 엑셀에서 ’CSV UTF-8(쉼표로 분리)’로 저장하면 이 도구와 가장 잘 맞습니다. 옛 ’CSV(쉼표로 분리)’는 CP949로 저장되므로, 메모장에서 복사하지 말고 파일 열기로 여세요.
  • 테스트 데이터나 시드 데이터를 만들 때 유용합니다. 시트에서 표를 만들고 CSV로 복사해 붙여 넣으면 바로 객체 배열 JSON이 나옵니다.
  • 열 이름을 user.name, user.email처럼 점으로 쓰고 중첩 복원을 켜면 사용자 정보를 하나의 객체로 묶은 JSON을 얻을 수 있습니다.
  • 숫자와 불리언 변환은 선택 사항입니다. 서버 API가 문자열 "30"과 숫자 30을 구분한다면 대상 스키마에 맞춰 켜거나 끄세요.
  • 변환 결과의 키 순서는 헤더의 순서와 같으며, 데이터 안에 중복된 행이 있어도 합치지 않고 그대로 모두 출력합니다.
  • 입력은 브라우저 안에서만 처리되므로 고객 목록처럼 민감한 표도 안전하게 변환됩니다.

더 알아두면 좋은 점

  • 구분자 자동 감지는 쉼표, 세미콜론, 탭, 파이프 네 가지 후보 중 하나를 추측합니다. 값이 한두 줄뿐이거나 따옴표 안에 구분자가 많다면 직접 선택하는 편이 정확합니다.
  • 윈도우와 맥에서 만든 파일은 줄 끝이 달라도 모두 같은 방식으로 읽습니다. 마지막 줄에 줄바꿈이 있든 없든 결과는 같습니다.
  • 헤더만 있고 데이터 행이 없는 CSV는 빈 배열 []이 됩니다. 입력 칸을 비우면 결과 칸도 비워 둡니다.
  • 결과 JSON은 들여쓰기 옵션만 바꿔도 값이 바뀌지 않으므로 용도에 맞게 골라 쓰세요.
  • 열 이름에 같은 이름이 둘 이상 있어도 데이터가 사라지지 않고 name_2처럼 번호가 붙어 모두 남습니다. 실수로 복사한 열이 숨어 버리는 일이 없어 편리합니다.
  • 숫자 변환을 켜더라도 1,234처럼 천 단위 쉼표가 들어간 값은 문자열로 남습니다. 쉼표를 지운 값으로 바꾼 뒤 변환하면 숫자로 읽습니다.
  • 큰따옴표로 감싼 빈 값("")과 아무것도 없는 빈 칸은 둘 다 빈 문자열로 나옵니다. 둘을 구분해야 하는 데이터라면 원본 설계를 다시 확인하세요.
  • 변환 결과는 줄 수가 많아도 한 번에 복사할 수 있으며, 헤더 행은 결과 배열에 포함되지 않고 각 객체의 키로만 쓰입니다.

추가 예시

CSV 입력 옵션 JSON 결과
a,b + 1,2 기본 [{"a":"1","b":"2"}]
a,b + 1,2 타입 변환 [{"a":1,"b":2}]
1,2 헤더 끔 [["1","2"]]
x;y + 1;2 자동 감지 세미콜론을 구분자로 인식

타입 변환을 끈 기본 상태에서는 모든 값이 문자열이므로, 숫자가 필요한 곳에서는 옵션을 켜는 것을 잊지 마세요. 반대로 우편번호처럼 문자열이어야 하는 열이 섞여 있다면 앞자리 0이 있는 값은 유지되지만 다른 값은 숫자가 될 수 있으니 결과를 확인하세요.

결과 JSON을 API 테스트 도구나 코드에 붙여 넣은 뒤에는 필드 이름과 타입이 서버 스키마와 맞는지 한 번 더 확인하세요. 열 이름의 오타나 대소문자 차이는 변환 단계에서 고쳐 주지 않으므로, 원본 CSV의 헤더를 먼저 정리해 두면 이후 작업이 훨씬 수월합니다.

데이터가 수천 행이어도 변환은 입력을 바꾸는 즉시 이루어지지만, 아주 큰 입력은 잠시 기다린 뒤 결과가 갱신됩니다. 옵션만 바꿔 다시 복사하면 되므로 입력 CSV를 다시 붙여 넣을 필요가 없고, 여러 설정의 결과를 빠르게 비교할 수 있습니다.

마지막으로, 결과 JSON을 공유할 때는 어떤 옵션(타입 변환, 중첩 복원, 헤더 사용 여부)으로 만들었는지 함께 적어 두세요. 같은 CSV라도 옵션에 따라 결과 구조가 달라지므로, 나중에 다시 변환할 때 같은 결과를 재현하기 쉬워집니다.

자주 묻는 질문

구분자를 따로 지정해야 하나요?

기본값은 자동 감지입니다. 쉼표, 세미콜론, 탭, 파이프 중에서 첫 줄들의 모양을 보고 고릅니다. 값 안에 다른 구분자가 많아 잘못 감지되면 직접 지정하세요. 감지된 구분자는 결과 위에 표시됩니다.

숫자가 문자열로 나와요.

기본은 모든 값을 문자열로 둡니다. '숫자·true/false를 JSON 타입으로 변환'을 켜면 변환하되, 앞에 0이 붙은 007, 전화번호처럼 선행 0이 있는 값, +1, 2^53을 넘는 정수는 정보 손실을 막기 위해 문자열로 남깁니다.

엑셀에서 저장한 CSV의 한글이 깨지지 않나요?

**CSV 파일 열기**로 파일을 직접 열면 됩니다. UTF-8(BOM 포함)과 UTF-16은 표시를 보고, 그 밖에는 UTF-8로 읽어 보고 맞지 않으면 한국어 엑셀의 기본 저장 형식인 EUC-KR(CP949)로, 그것도 아니면 서유럽 엑셀의 Windows-1252로 읽어서 어느 쪽으로 읽었는지 알려 줍니다. 메모장 등에서 이미 깨진 글자를 복사해 붙여 넣은 경우에는 되돌릴 수 없으니 파일로 여세요.

칸 수가 맞지 않는 행은 어떻게 되나요?

변환은 하되 헤더와 칸 수가 다른 행의 번호를 '확인이 필요한 행'으로 알려 줍니다. 모자란 칸의 키는 결과에서 빠지고, 남는 칸은 버려집니다.

필요한 도구가 있나요?