JSON을 JSON 스키마로 변환 — Numio
JSON 샘플에서 JSON Schema(draft-07)를 추론합니다. 객체 배열은 모든 요소를 병합하며, 일부 요소에서 빠졌거나 null인 키는 required에서 제외합니다.
수집한 예시로 API 응답이나 webhook 페이로드의 첫 검증 스키마를 만들 때.
이럴 때 사용하세요
- 수집한 예시로 API 응답이나 webhook 페이로드의 첫 검증 스키마를 만들 때.
- Ajv, OpenAPI 또는 JSON Schema → TypeScript/Zod 단계에 넣을 스키마를 만들 때.
사용 방법
- JSON 샘플을 왼쪽 편집기에 붙여 넣거나, 파일 불러오기 버튼으로 UTF-8 파일을 엽니다. 레코드 여러 개를 담은 배열을 쓰면 required 목록이 더 정확해집니다.
- 스키마를 확인합니다. 단일 객체의 모든 키는 필수이고, 일부 배열 요소에서 빠졌거나 null인 키는 선택입니다.
- 스키마를 복사하고 format, enum, integer, minimum처럼 샘플로는 알 수 없는 제약을 추가합니다.
JSON 샘플
[
{ "id": 1, "name": "Ada", "email": null },
{ "id": 2, "name": "Lin", "email": "lin@example.com" }
]JSON Schema(draft-07)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Generated schema for Root",
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
}
},
"required": [
"id",
"name"
]
}
}세부 정보 및 제한 사항
숫자는 항상 "type": "number"입니다. integer, 형식(email, date-time), enum, pattern은 추론하지 않습니다. title은 항상 "Generated schema for Root"입니다.
모든 곳에서 null인 필드는 빈 스키마 {}가 됩니다. 다른 값과 함께 나오는 null은 null 타입이 아니라 선택 필드로 처리됩니다.
[1, "x"]처럼 타입이 섞인 배열은 튜플(items 목록과 additionalItems: false)이 되고, 빈 배열은 items: {}가 됩니다.
WebAssembly로 컴파일된 json_typegen이 브라우저에서 생성합니다. 잘못된 JSON(후행 쉼표 포함)은 JSON 파싱 오류를 보여 주며, 42 같은 단일 값은 구조가 없어 거부됩니다.
FAQ
어떤 JSON Schema 드래프트로 출력되나요?
Draft-07이며 "$schema": "http://json-schema.org/draft-07/schema#"로 선언됩니다. 2019-09나 2020-12를 선택하는 옵션은 없습니다.
선택 필드는 어떻게 판단하나요?
같은 배열의 요소끼리만 비교합니다. 일부 객체에서 빠졌거나 null인 키는 required에서 제외됩니다. 단일 객체에서는 모든 키가 필수입니다.
루트가 JSON 배열이어도 변환되나요?
네. 예시처럼 루트는 "type": "array"가 되고 요소들은 하나의 items 스키마로 병합됩니다.