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로 복사
결과 · schema.json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "GeneratedSchema",
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "integer"
      },
      "customer": {
        "type": "string"
      },
      "total": {
        "type": "number"
      },
      "paid": {
        "type": "boolean"
      },
      "note": {
        "type": [
          "string",
          "null"
        ]
      },
      "shipped": {
        "type": [
          "string",
          "null"
        ]
      }
    },
    "required": [
      "id",
      "customer",
      "total",
      "paid",
      "note",
      "shipped"
    ],
    "additionalProperties": false
  }
}
행3
열6
타입1
크기715byte

파일을 읽은 결과

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

줄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나 TSV를 읽어 각 레코드를 JSON 객체로 바꾸고, 그 객체 배열에 대한 스키마를 추론합니다. 열마다 속성 하나, 속성별 type, required 목록, additionalProperties가 들어 있습니다. 가져오기 파이프라인, 대량 업로드를 받는 API, 폼 생성기의 검증 규칙을 빠르게 시작할 때 쓰기 좋습니다.

스키마는 입력한 샘플을 설명합니다. 타입은 값에서 가져오고, 빈 칸이 있는 열은 null 허용으로 표시되며, 모든 레코드에 모든 열이 있으므로 키는 필수가 됩니다. 형식, 범위, 패턴, 열거형은 추론하지 않으므로 계약에 더 필요한 부분은 직접 조여야 합니다.

CSV 읽기와 스키마 생성은 브라우저 안에서 이뤄지며 서버로 전송되지 않습니다. 한도는 입력 20 MiB, 데이터 행 50,000개, 열 200개이고, 다운로드 파일 이름은 schema.json입니다.

사용 방법

  1. CSV 불러오기

    행을 붙여 넣거나 .csv, .tsv 파일을 편집기에 끌어다 놓거나 엽니다. 열 이름이 속성 이름이 되도록 "첫 행은 헤더"를 켜 두세요. 끄면 속성 이름이 column_1, column_2 식으로 붙습니다.

  2. 구분자와 빈 줄 확인

    자동 감지는 앞쪽 30개 레코드를 보고 쉼표, 세미콜론, 탭, 파이프 중 하나를 고르며, 입력창 아래 배지에 결과가 나옵니다. "빈 줄 건너뛰기"는 켜 두세요. 끄면 빈 줄이 모두 null인 레코드가 되어 모든 속성이 null 허용으로 바뀝니다.

  3. 타입 감지는 켠 상태로

    "숫자·불리언·null 감지"가 열마다 타입을 하나 정합니다. 끄면 모든 속성이 string입니다. NA 같은 단어가 파일에서 실제 데이터라면 "null로 볼 단어"를 고치세요.

  4. 스키마 옵션 설정

    스키마 제목을 입력하고(기본값 GeneratedSchema, 비우면 키워드 생략), 드래프트에서 Draft 2020-12와 Draft-07 중 하나를 고른 뒤 "키를 필수로 표시"와 "추가 속성 허용"을 정합니다.

  5. 검토 후 복사

    "파일을 읽은 결과" 패널에서 열마다 정해진 타입을 확인하고, 스키마를 복사하거나 schema.json으로 내려받은 뒤 사용하기 전에 조건을 보강하세요.

작동 원리

생성기가 내보내는 것

$schema는 https://json-schema.org/draft/2020-12/schema를, Draft-07을 고르면 http://json-schema.org/draft-07/schema#를 가리킵니다. 그 뒤에 title, "type": "array", "type": "object"인 items 스키마가 옵니다. 각 열은 헤더 순서대로 properties의 항목이 됩니다.

"키를 필수로 표시"를 켜면 모든 열이 required에 들어갑니다. 셀이 모자란 레코드도 채워 넣으므로 모든 CSV 레코드에 모든 열이 있기 때문입니다. additionalProperties는 "추가 속성 허용"을 켜지 않는 한 false라서, 기본 설정에서는 열에 없는 키를 가진 객체를 검증기가 거부합니다.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "GeneratedSchema",
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "integer"
      }
    },
    "required": [
      "id"
    ],
    "additionalProperties": false
  }
}

열이 타입이 되는 과정

값은 먼저 CSV JSON 변환기와 같은 방식으로 타입이 정해집니다. 열마다 타입 하나이고, 채워진 셀이 모두 JSON 숫자가 정확히 담을 수 있는 일반 숫자(앞자리 0 없음, 잃는 자릿수 없음)일 때만 숫자, true와 false뿐일 때만 불리언, 나머지는 텍스트입니다. 빈 셀과 NA 같은 null 단어는 null이 됩니다.

그다음 스키마가 본 그대로를 기술합니다. 정수만 있으면 integer이고, 정수와 소수가 섞이면 모든 정수는 number이기도 하므로 number가 됩니다. null이 하나라도 있는 열은 ["number", "null"] 같은 두 항목짜리 타입을, 값이 하나도 없는 열은 {"type": "null"}을 받습니다.

열의 값속성 스키마
1, 2{ "type": "integer" }
9.5, 7.25{ "type": "number" }
10, 12.5{ "type": "number" }
true, FALSE{ "type": "boolean" }
9.5, (빈 셀){ "type": ["number", "null"] }
3, N/A{ "type": ["integer", "null"] }
Ari, (빈 셀){ "type": ["string", "null"] }
02134, 10001{ "type": "string" }
(빈 셀), NA{ "type": "null" }

추론하지 않는 것

format(date-time, email 등), minimum, maxLength, pattern, enum 키워드는 샘플로 증명할 수 없으므로 만들지 않습니다. 2026-03-14 같은 날짜 열은 그냥 string이고, 서로 다른 값이 세 개뿐인 상태 열도 열거형이 되지 않습니다. 실제로 필요한 제약은 복사한 뒤 직접 추가하세요.

실제 예시

단순한 타입 열
입력
id,name,active
1,Ari,true
2,Bea,false
출력
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "GeneratedSchema",
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "integer"
      },
      "name": {
        "type": "string"
      },
      "active": {
        "type": "boolean"
      }
    },
    "required": [
      "id",
      "name",
      "active"
    ],
    "additionalProperties": false
  }
}

기본 옵션의 결과입니다.

한 열에 정수와 소수
입력
sku,price,in_stock
A1,10,true
B2,12.5,false
C3,9,true
출력
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Product",
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "sku": {
        "type": "string"
      },
      "price": {
        "type": "number"
      },
      "in_stock": {
        "type": "boolean"
      }
    },
    "required": [
      "sku",
      "price",
      "in_stock"
    ],
    "additionalProperties": false
  }
}

스키마 제목은 Product입니다. price 열에 10, 12.5, 9가 있어 둘 다 받는 number가 되었습니다.

빈 셀과 NA, 추가 키 허용
입력
id,score,tag
1,9.5,a
2,,NA
출력
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Scores",
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "integer"
      },
      "score": {
        "type": [
          "number",
          "null"
        ]
      },
      "tag": {
        "type": [
          "string",
          "null"
        ]
      }
    },
    "required": [
      "id",
      "score",
      "tag"
    ],
    "additionalProperties": true
  }
}

스키마 제목 Scores, "추가 속성 허용" 켬입니다. 비어 있는 score와 NA인 tag 때문에 두 열 모두 null 허용이 되었습니다.

우편번호, Draft-07, 필수 키 없음
입력
zip,city
02134,Boston
10001,New York
출력
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "GeneratedSchema",
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "zip": {
        "type": "string"
      },
      "city": {
        "type": "string"
      }
    },
    "additionalProperties": false
  }
}

드래프트를 Draft-07로, "키를 필수로 표시"를 끈 결과라 required 목록이 없습니다. 02134는 앞자리가 0이라 zip은 문자열로 남고 안내 문구가 이를 알려 줍니다.

감지를 끈 경우
입력
sku,price,in_stock
A1,10,true
B2,12.5,false
출력
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "GeneratedSchema",
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "sku": {
        "type": "string"
      },
      "price": {
        "type": "string"
      },
      "in_stock": {
        "type": "string"
      }
    },
    "required": [
      "sku",
      "price",
      "in_stock"
    ],
    "additionalProperties": false
  }
}

모든 열이 문자열입니다. 변환 전에 CSV 원문 값부터 검증하는 파이프라인에 알맞습니다.

자주 하는 실수

  • null 허용 여부는 샘플만 보고 정함

    샘플에 빈 칸이 없는 열은 운영 데이터에서 비어 있을 수 있어도 null 없이 타입이 정해집니다. 빠질 수 있는 필드라면 타입에 "null"을 추가하거나 required에서 빼세요.

  • 모든 행에서 비어 있는 열

    이런 열은 {"type": "null"}이 되어 나중에 들어오는 실제 값을 모두 거부합니다. 샘플에 열마다 채워진 셀을 하나 이상 넣거나 타입을 직접 정하세요.

  • 모든 필드가 필수

    모든 레코드에 모든 열이 있으므로 "키를 필수로 표시"는 거의 비어 있는 열까지 전부 나열합니다. 선택 필드는 required에서 지우거나 옵션을 끄세요.

  • 기본이 엄격함

    "추가 속성 허용"이 꺼져 있으면 새 열이 붙은 객체는 검증에 실패합니다. 필드 이름 오타를 잡는 데는 유용하지만, 상위 시스템이 필드를 추가할 수 있다면 켜세요.

  • 식별자가 정수로 추론됨

    1001, 1002처럼 숫자만 있는 id 열은 integer가 됩니다. 숫자 키라면 괜찮지만, 나중에 앞자리 0이 붙을 수 있는 SKU나 계좌번호는 string이어야 합니다. 타입을 고치거나 코드성 데이터에서는 감지를 끄세요.

자주 묻는 질문

출력은 어느 JSON 스키마 드래프트를 쓰나요?

기본은 Draft 2020-12이고, 드래프트에서 Draft-07을 고르면 그에 맞게 $schema URL이 바뀝니다. Ajv(2020-12는 2020 빌드), 파이썬 jsonschema, 자바 networknt 검증기가 둘 다 지원합니다.

열 타입이 ["number", "null"]로 나오는 이유는?

그 열에 빈 셀이나 NA 같은 null 단어가 하나 이상 있어서 숫자와 함께 null도 허용한 것입니다. 항상 채워져야 하는 필드라면 타입에서 "null"을 지우세요.

일부 필드를 선택 필드로 표시하려면?

"키를 필수로 표시"를 끄면 required 목록 자체가 빠집니다. 켜 둔 채 복사한 뒤 배열에서 이름을 하나씩 지워도 됩니다.

제목은 무슨 역할을 하나요?

스키마 루트의 title 키워드를 정합니다. 스키마 제목을 비우면 이 키워드를 아예 쓰지 않습니다.

스키마가 CSV 행 하나를 설명하나요, 파일 전체를 설명하나요?

레코드 객체의 JSON 배열을 검증하는 스키마이며, 헤더를 켠 CSV JSON 변환기가 만드는 결과와 같은 형태입니다. 원본 CSV 텍스트가 아니라 변환된 JSON을 검증하세요.

CSV가 업로드되나요?

아니요. 타입 추론에 쓰는 샘플은 브라우저 안에서 읽히며 서버로 전송되지 않습니다. 그래서 운영 데이터 내보내기를 제3자에게 넘기지 않고 샘플로 쓸 수 있습니다.

마지막 업데이트: