JSON 스키마 생성기
샘플 JSON에서 JSON 스키마를 추론합니다 — draft 2020-12·07·06·04 선택, email·uri·date-time·date·time·uuid·ipv4 문자열 포맷을 자동 감지합니다.
.json 파일을 상자에 끌어다 놓아도 됩니다.
Draft 2020-12가 현재 표준입니다 — 이 스키마를 넣을 검증기가 Draft-07만 안다고 하지 않는 한(오래된 Ajv, 코드 생성기 일부) 2020-12를 고르세요.
모든 필드를 필수로 두는 건 엄격한 출발점일 뿐입니다. 실제 스키마는 꼭 있어야 하는 필드만 required에 올리므로, 체크를 풀거나 만들어진 목록을 나중에 다듬으세요.
체크하지 않으면 스키마에 적히지 않은 키도 받아들입니다 — JSON Schema의 기본 동작입니다. 체크하면 모든 객체에 "additionalProperties": false가 붙습니다. 배열 항목은 따로 정할 필요가 없습니다: 항목이 몇 개든 "items"가 모두 설명합니다.
샘플 JSON에서 JSON 스키마 생성
JSON 페이로드를 붙여넣으면 구조를 설명하는 JSON 스키마를 만들어 줍니다. 객체는 properties가 되고, 배열은 병합된 items 스키마를 가지며, 각 값은 string·number·integer·boolean·null로 타입이 지정됩니다. draft 2020-12, draft-07, draft-06, draft-04 중에서 고르고, 모든 객체 키를 required로 표시할지 토글할 수 있습니다. 기본으로 꺼져 있는 상자가 둘 더 있습니다 — “샘플 값을 examples로 넣기”는 문자열·숫자·불리언마다 샘플의 값으로 examples 목록을 채우고, “샘플에 없던 키는 거부”는 모든 객체에 "additionalProperties": false를 붙입니다. 역시 기본으로 꺼져 있는 “되풀이되는 값으로 enum 만들기”는 샘플 값이 몇 가지로 되풀이되는 문자열 필드를 enum으로 만들고, “종류가 섞인 배열은 자리마다 따로 (튜플)”는 그런 배열을 닫힌 튜플로 씁니다. “샘플을 이 스키마로 검사”를 누르면 이 사이트의 검증기로 샘플이 스키마를 통과하는지, 통과하지 못하면 어디서 막히는지 알려 줍니다. 들여쓰기에서 공백 2칸(기본)·공백 4칸·탭 중에 고를 수 있고, .json 파일은 파일 열기 말고 샘플 칸에 끌어다 놓아도 되며, 받는 파일은 그 이름을 따라 users.json이 users.schema.json이 됩니다.
문자열 포맷 자동 감지
문자열 값은 email, uri, date-time(ISO 8601), date, time, uuid, ipv4 같은 일반적인 포맷을 자동으로 감지해 표시합니다. 시각은 RFC 3339와 그것을 따르는 검증기처럼 시간대가 있어야 하므로 09:30:00Z는 time이 되고 09:30:00은 포맷 없는 문자열로 남습니다. 모든 처리는 브라우저에서 이루어지므로 민감한 데이터도 기기를 떠나지 않습니다.
자주 묻는 질문
어떤 JSON 스키마 draft를 지원하나요?
draft 2020-12, draft-07, draft-06, draft-04를 지원합니다. 드래프트 드롭다운에서 선택하면 $schema URI와 구조가 선택한 draft에 맞게 생성됩니다. 이 생성기가 쓰는 키워드로는 옛 draft도 거의 같은 문서이고 다른 곳은 두 군데뿐입니다 — Draft-04에는 examples 키워드가 없어 샘플 값을 넣지 않고 그렇다고 알려 주며, 튜플은 prefixItems 대신 items 목록으로 씁니다.
배열 항목은 어떻게 처리되나요?
배열의 모든 요소를 하나의 items 스키마로 병합합니다. 다만 “종류가 섞인 배열은 자리마다 따로 (튜플)”를 켜면, 요소의 종류가 둘 이상인 배열은 자리마다 스키마를 따로 두는 닫힌 튜플로 씁니다. 객체 배열의 경우 속성을 합치고, 모든 요소에 존재하는 키만 required로 표시합니다.
어떤 문자열 포맷을 감지하나요?
date-time(ISO 8601), date, time, uuid, ipv4, email, uri를 이 순서로 확인해 값이 맞으면 format 키워드를 붙입니다. 샘플이 자기 스키마를 통과하도록 date는 달력에 있는 날짜여야 하고, time과 date-time에는 시간대가 있어야 합니다. 배열이나 객체를 합칠 때는 모든 샘플이 같은 포맷일 때만 format을 남기고, 해당하지 않는 값은 format 없이 type: string으로 둡니다.
스키마에 examples를 넣거나, 샘플에 없던 키를 거부하게 할 수 있나요?
네 — 둘 다 기본으로 꺼져 있는 상자입니다. “샘플 값을 examples로 넣기”는 문자열·숫자·불리언마다 샘플에 있던 값으로 examples 배열을 채우고, 목록의 여러 요소에서 나온 값은 라벨에 적힌 개수까지 합칩니다. “샘플에 없던 키는 거부”는 중첩 객체와 목록 요소까지 모든 객체에 "additionalProperties": false를 붙입니다. 끄면 추가 키를 받아들이며, 이것이 JSON Schema의 기본 동작입니다. 배열은 하나의 items 스키마가 이미 모든 요소를 설명하므로 따로 정할 필요가 없습니다.
enum이나 튜플을 추론하거나, 샘플을 검사할 수 있나요?
네. 기본으로 꺼져 있는 “되풀이되는 값으로 enum 만들기”를 켜면, 샘플 값이 몇 가지로 되풀이되는 문자열 필드에 enum을 붙이며 목록의 여러 레코드에서 나온 값을 합쳐 셉니다. 값마다 한 번씩만 나오면 자유 입력으로 보고, 늘 같은 값 하나뿐이면 고를 거리가 없는 것으로 봅니다. 역시 꺼져 있는 “종류가 섞인 배열은 자리마다 따로 (튜플)”는 그런 배열을 닫힌 튜플로 써서 객체의 properties가 사라지지 않게 합니다. “샘플을 이 스키마로 검사”는 이 사이트의 검증기(Ajv와 ajv-formats)로 화면의 샘플과 스키마를 검사해 통과하는지, 통과하지 못하면 어디서 막히는지 알려 주며, 검증기는 처음 누를 때 불러옵니다.
파일을 끌어다 놓거나, 스키마의 들여쓰기를 고를 수 있나요?
네. .json, .jsonc, .txt 파일을 샘플 칸에 끌어다 놓으면 파일 열기…와 같은 방식으로 읽습니다 — 크기 제한도, 텍스트 인코딩 처리도 같습니다. 파일 이름은 다운로드로 이어져 users.json이 users.schema.json이 되고, 다른 종류의 파일은 안내와 함께 거부합니다. 들여쓰기 메뉴에서는 기본값인 공백 2칸 말고 공백 4칸이나 탭도 고를 수 있습니다. 작은따옴표는 JSON이 아니므로 따옴표는 큰따옴표 그대로입니다.