MYMONDAY.ai
서비스스튜디오도구데이터·포맷73CSS 생성기19색상·이미지10인코딩·보안10웹·SEO11개발·데브옵스10파일·내보내기18계산기6가이드

CSV JSON 변환기

CSV를 붙여 넣거나 파일을 열면 객체 배열 JSON을 얻고, 헤더가 없는 파일은 배열의 배열로 받을 수 있습니다.

  • 브라우저에서 처리
  • 가입 없음
  • 무료

도구 작업 공간

예제

옵션

끄면 열 이름이 column_1, column_2 …가 되고 JSON은 배열이 됩니다.

비어 있거나 구분자만 있는 줄을 버려서 뒤 레코드가 밀리지 않게 합니다.

채워진 셀이 모두 맞을 때만 열이 숫자·불리언이 됩니다. 01234나 20자리 ID는 텍스트로 남습니다. 끄면 모든 셀이 적은 그대로 텍스트입니다.

대소문자 구분 없이 쉼표로 구분합니다. 빈 셀은 항상 null입니다.

들여쓰기

CSV 입력

6줄181byte구분자: 쉼표 (자동 감지)

결과

⌘/Ctrl + Enter로 복사
결과 · data.json
[
  {
    "id": 1001,
    "customer": "Ada Lovelace",
    "total": 87.9,
    "paid": true,
    "note": "Gift wrap, please",
    "shipped": "2026-03-14"
  },
  {
    "id": 1002,
    "customer": "Grace Hopper",
    "total": 19,
    "paid": false,
    "note": null,
    "shipped": "2026-03-15"
  },
  {
    "id": 1003,
    "customer": "Linus",
    "total": 1200.5,
    "paid": true,
    "note": "Line one\nline two",
    "shipped": null
  }
]
행3
열6
크기440byte

파일을 읽은 결과

변환기가 보는 앞쪽 레코드와 열마다 정해진 타입입니다.

줄id숫자customer텍스트total숫자paid불리언note텍스트shipped텍스트
21001Ada Lovelace87.90trueGift wrap, please2026-03-14
31002Grace Hopper19falseNA2026-03-15
41003Linus1200.5trueLine one line two·

이 CSV JSON 변환기는 스프레드시트에서 내보낸 CSV를 API 요청 본문, 시드 스크립트, 프런트엔드 목업 데이터로 쓸 수 있는 JSON 배열로 바꿉니다. "첫 행은 헤더"를 켜면 각 레코드가 열 이름을 키로 하는 객체가 되고, 끄면 열 순서를 그대로 유지한 배열의 배열이 나옵니다.

맨 위에 sep=; 줄이 붙은 유럽식 엑셀의 세미콜론 파일, 구글 시트에서 복사한 TSV, 쉼표나 줄바꿈이 든 셀, id 열이 두 번 나오는 헤더, 데이터 중간의 빈 줄처럼 실무에서 흔한 문제를 염두에 두고 만들었습니다. 숫자·불리언·null 감지는 기본으로 켜져 있지만 열마다 타입을 하나만 정하므로, 02134 같은 우편번호 열은 텍스트로 남고 숫자 열의 NA는 열 전체를 문자열로 만들지 않고 null이 됩니다.

입력한 CSV는 브라우저 안에서 처리되며 서버로 전송되지 않습니다. 입력은 20 MiB, 데이터 행 50,000개, 열 200개까지입니다. 결과 패널은 앞의 2,500줄을 강조 표시해 보여 주며, 복사와 data.json 다운로드에는 항상 전체 결과가 담깁니다.

사용 방법

  1. CSV 불러오기

    텍스트를 붙여 넣거나 .csv, .tsv 파일을 편집기에 끌어다 놓거나 파일 열기 버튼으로 엽니다. 파일은 UTF-8로 읽고, 맨 앞의 BOM은 파싱 전에 제거합니다.

  2. 구분자 확인

    구분자를 "자동 감지"로 두거나 쉼표, 세미콜론, 탭, 파이프 중 하나를 고릅니다. 입력창 아래 배지에 실제로 쓴 구분자와 자동 감지 여부가 표시됩니다.

  3. 헤더와 빈 줄 처리 정하기

    "첫 행은 헤더"를 켜 두면 객체가, 끄면 모든 레코드를 데이터로 본 배열이 나옵니다. 기본으로 켜진 "빈 줄 건너뛰기"는 비어 있거나 구분자만 있는 줄을 버립니다.

  4. 타입 판별과 들여쓰기 설정

    "숫자·불리언·null 감지"는 기본으로 켜져 있습니다. NA 같은 단어가 파일에서 실제 데이터라면 "null로 볼 단어"를 고치고, 들여쓰기는 공백 2칸, 공백 4칸, 탭, 압축 중에서 고릅니다.

  5. 읽은 결과 확인 후 복사

    "파일을 읽은 결과" 패널에서 앞쪽 레코드와 줄 번호, 열마다 정해진 타입을 확인합니다. 결과 아래 안내를 읽은 뒤 JSON을 복사하거나(Ctrl 또는 ⌘ + Enter로도 복사) data.json으로 내려받습니다.

작동 원리

따옴표 필드 파싱 규칙 (RFC 4180)

파서는 RFC 4180을 따릅니다. 큰따옴표로 시작하는 필드는 닫는 따옴표까지 이어지고, 그 안의 구분자·CR·LF는 일반 문자로 취급합니다. 연속된 큰따옴표 ""는 따옴표 한 글자를 뜻합니다. 12" pipe처럼 따옴표 없는 값 중간에 있는 따옴표는 문자 그대로 남고, 닫는 따옴표 바로 뒤에 붙은 글자도 값의 일부로 유지됩니다.

줄 끝은 LF, CRLF, 단독 CR을 모두 받아들입니다. 따옴표가 닫히지 않으면 파일 나머지가 셀 하나로 뭉개지게 두지 않고, 따옴표가 열린 행과 열을 알려 주는 오류로 변환을 멈춥니다. "오류 위치로 이동" 버튼을 누르면 그 자리로 갑니다.

name,note
Ari,"says ""hi"", then leaves"
Bea,"two
lines"

여러 레코드를 보고 정하는 구분자 감지

자동 감지는 첫 줄의 글자 수를 세지 않습니다. 쉼표, 세미콜론, 탭, 파이프 후보마다 앞쪽 최대 30개 레코드를 실제로 파싱해 보고, 가장 많은 레코드가 같은 열 수로 나뉘는 후보를 고릅니다. 일치도가 같으면 열이 더 많이 나오는 쪽을 택합니다. 이 과정에서 따옴표를 존중하므로 "last, first";age 같은 헤더도 세미콜론 구분으로 읽습니다.

엑셀이 일부 지역 설정에서 붙이는 sep=; 형태의 첫 줄은 자동 감지보다 우선하며 데이터에서는 빠집니다. 구분자를 직접 고르면 그 선택이 둘 다보다 우선합니다.

타입은 열 단위로 정함

감지를 켜면 열마다 타입이 정확히 하나로 정해집니다. 채워진 셀이 모두 JSON 숫자가 정확히 담을 수 있는 일반 숫자(부호, 숫자, 소수부, 지수로 된 42, -0.5, .5, 1e3 등)일 때만 숫자 열이 됩니다. 앞자리 0이 없어야 하고, 읽어 들인 숫자를 다시 출력했을 때 같은 십진수 값이 나와야 합니다. 1.50과 3.141592653589793은 통과하지만 12345678901234567890과 0.1234567890123456789는 통과하지 못합니다. 채워진 셀이 모두 대소문자 무관 true나 false일 때만 불리언 열이 됩니다. 그 밖에는 열 전체가 텍스트로 남으므로 한 열에 1과 "abc"가 섞이는 일은 없습니다.

빈 셀과 "null로 볼 단어"에 적힌 단어(기본값 NA, N/A, null, none, undefined, 대소문자 무관)는 어느 열에서든 null이 됩니다. 숫자처럼 보이지만 01234, 20자리 ID, 자릿수가 너무 긴 소수가 든 열은 텍스트로 남고 안내 문구가 그 열 이름을 알려 줍니다. 감지를 끄면 모든 셀이 적힌 그대로의 텍스트이며, 빈 셀은 "", 앞뒤 공백도 그대로 남습니다.

CSV 열의 값감지 끔감지 켬
1.50, 7"1.50", "7"1.5, 7
TRUE, false"TRUE", "false"true, false
02134, 10001"02134", "10001""02134", "10001"
0.1, 0.1234567890123456789"0.1", "0.1234567890123456789""0.1", "0.1234567890123456789"
9.5, NA"9.5", "NA"9.5, null
12.5, 9, TBD"12.5", "9", "TBD""12.5", "9", "TBD"
yes, no"yes", "no""yes", "no"

헤더 이름과 셀 수가 다른 레코드

헤더 셀은 앞뒤 공백을 제거합니다. 빈 헤더는 1부터 세는 위치에 따라 column_N이 되고, 같은 이름이 반복되면 접미사가 붙어 id,id는 id와 id_2가 됩니다. 덕분에 값이 덮어써지지 않으며, 이름이 바뀐 열은 안내 문구로 알려 줍니다.

셀 수가 헤더보다 적은 레코드는 채워 넣습니다. 빠진 셀은 null, 감지를 끈 경우 ""가 됩니다. 헤더보다 많은 셀은 버리지 않고 별도의 column_N 열로 만듭니다. 셀 수가 달랐던 레코드 개수도 안내 문구로 알려 줍니다. 건너뛴 빈 줄 때문에 뒤 레코드가 밀리는 일은 없습니다.

실제 예시

기본 설정: 열마다 타입 하나
입력
id,zip,name,active,score
1,02134,Ari,TRUE,9.5
2,10001,Bea,false,NA
출력
[
  {
    "id": 1,
    "zip": "02134",
    "name": "Ari",
    "active": true,
    "score": 9.5
  },
  {
    "id": 2,
    "zip": "10001",
    "name": "Bea",
    "active": false,
    "score": null
  }
]

zip은 앞자리 0을 유지하고, 숫자처럼 보이지만 텍스트로 남긴 열이라는 안내가 표시됩니다. score 열의 NA는 null이 되었고 TRUE는 true가 되었습니다.

같은 파일에서 감지를 끈 경우
입력
id,zip,name,active,score
1,02134,Ari,TRUE,9.5
2,10001,Bea,false,NA
출력
[
  {
    "id": "1",
    "zip": "02134",
    "name": "Ari",
    "active": "TRUE",
    "score": "9.5"
  },
  {
    "id": "2",
    "zip": "10001",
    "name": "Bea",
    "active": "false",
    "score": "NA"
  }
]

"숫자·불리언·null 감지"를 끈 결과입니다. 대문자 TRUE와 NA 표기까지 모든 셀이 적힌 그대로의 텍스트입니다.

헤더 없음, 세미콜론, 압축 출력
입력
1;Ari;true
2;"Bea; Jr.";false
출력
[[1,"Ari",true],[2,"Bea; Jr.",false]]

"첫 행은 헤더"를 끄고 들여쓰기를 압축으로 둔 결과입니다. 세미콜론이 자동 감지되었고, 따옴표로 감싼 Bea; Jr.는 세미콜론을 그대로 유지했습니다.

중복·빈 헤더와 셀이 모자란 레코드
입력
id,id,
1,2,3
4,5
출력
[
  {
    "id": 1,
    "id_2": 2,
    "column_3": 3
  },
  {
    "id": 4,
    "id_2": 5,
    "column_3": null
  }
]

셀 수가 다른 레코드 1개와 이름이 바뀐 열 id_2, column_3이 안내 문구로 표시됩니다. 둘째 레코드에 없던 셋째 셀은 null이 되었습니다.

엑셀 sep=; 줄과 빈 줄
입력
sep=;
name;qty

Pen;3
;
Cup;12
출력
[
  {
    "name": "Pen",
    "qty": 3
  },
  {
    "name": "Cup",
    "qty": 12
  }
]

sep=; 줄이 구분자를 정하고 데이터에서 빠졌습니다. 빈 줄과 세미콜론만 있는 줄은 건너뛰었고, 빈 줄 2개를 건너뛰었다는 안내가 표시됩니다.

자주 하는 실수

  • null 단어가 실제 데이터를 가릴 수 있음

    NA는 나미비아의 국가 코드이고 None도 실제 값일 수 있습니다. 감지를 켜면 이런 셀은 어느 열에서든 null이 됩니다. "null로 볼 단어"를 고치거나(예: null만 남기기) 그 파일에서는 감지를 끄세요.

  • 엉뚱한 단어 하나가 열을 텍스트로 만듦

    12.5, 9, TBD가 든 가격 열은 모든 행이 문자열로 남습니다. 채워진 셀이 모두 숫자여야 숫자 열이 되기 때문입니다. TBD를 null 단어에 추가하거나 그 셀을 정리하면 숫자로 돌아옵니다.

  • 헤더가 있는 파일에서 헤더를 끔

    "첫 행은 헤더"를 끄면 헤더 단어도 일반 데이터가 되어, id, 1, 2가 든 열은 텍스트로 판별되고 숫자가 모두 따옴표에 싸여 나옵니다. 정말로 데이터부터 시작하는 파일에서만 헤더를 끄세요.

  • 소수점 쉼표는 숫자가 아님

    유럽식 내보내기는 1.5를 1,5로 적는 경우가 많습니다. 세미콜론 파일에서 이 셀은 텍스트 1,5이고 열 전체가 텍스트로 남습니다. JSON 숫자가 필요하면 내보내기 전에 스프레드시트의 소수점 기호를 점으로 바꾸세요.

  • 엑셀 저장 시 인코딩 문제

    엑셀의 일반 "CSV(쉼표로 분리)" 저장은 윈도우 기존 코드 페이지를 쓰는데, 이 도구는 파일을 UTF-8로 읽으므로 한글이나 악센트가 붙은 이름이 깨져 보입니다. "CSV UTF-8"로 저장하세요. 이 형식에 붙는 BOM은 자동으로 제거됩니다.

  • 한도 초과

    데이터 행 50,000개, 열 200개, 입력 20 MiB 중 하나라도 넘으면 안내 문구와 함께 변환이 멈춥니다. 행 단위로 파일을 나눈 뒤 변환하세요.

자주 묻는 질문

헤더 없는 CSV는 어떻게 JSON으로 바꾸나요?

"첫 행은 헤더"를 끄세요. 모든 레코드가 데이터로 처리되어 [[1,"Ari",true],[2,"Bea; Jr.",false]] 같은 배열의 배열이 나옵니다. 타입은 이때도 열 단위로 정해집니다.

세미콜론이나 탭으로 구분된 파일도 되나요?

됩니다. 자동 감지는 앞쪽 30개 레코드에 쉼표, 세미콜론, 탭, 파이프를 차례로 적용해 보고 열 수가 가장 일정하게 나오는 것을 고릅니다. 구분자에서 직접 고를 수도 있고, 엑셀의 sep=; 첫 줄도 따릅니다.

다른 숫자는 바뀌었는데 우편번호는 왜 문자열인가요?

열 안의 모든 값이 JSON 숫자로 바꿔도 손실이 없을 때만 숫자 열이 됩니다. 02134는 앞자리 0을, 20자리 ID는 뒷자리를 잃게 되므로 그런 열은 텍스트로 남고, 결과 아래 안내 문구가 그 열 이름을 알려 줍니다.

빈 문자열 대신 null을 받으려면 어떻게 하나요?

"숫자·불리언·null 감지"를 켜 두세요. 빈 셀과 null 단어가 null이 됩니다. 끄면 빈 셀은 "", NA는 문자열 "NA"입니다.

쉼표나 줄바꿈이 든 셀은 어떻게 되나요?

셀이 큰따옴표로 감싸져 있으면 쉼표와 줄바꿈이 값 안에 그대로 들어갑니다. 따옴표 셀 안의 줄바꿈은 JSON 문자열에서 \n으로 나타납니다.

CSV가 서버로 업로드되나요?

아니요. 붙여 넣은 텍스트나 연 파일은 브라우저 안에서 처리되며 서버로 전송되지 않습니다. 고객 데이터가 든 내보내기 파일을 다룰 때 중요한 점입니다.

배열 대신 한 줄에 객체 하나씩(JSONL)으로 받을 수 있나요?

CSV JSONL 변환기를 쓰세요. 같은 파서와 옵션으로 파일을 읽어 줄바꿈 구분 JSON을 만들어 줍니다.

더 깊이 읽기

마지막 업데이트: