JSON 스키마 검증기

JSON을 draft-03부터 2020-12까지의 JSON 스키마에 Ajv로 검증하고, 누락된 필드·잘못된 타입·형식 오류를 JSON Pointer 경로와 행·열 위치와 함께 나열합니다.

.json이나 .yaml 파일을 어느 상자에든 끌어다 놓아도 됩니다.

JSON을 스키마로 검증

JSON 문서와 JSON 스키마를(문서 형식·스키마 형식에서 YAML을 고르면 YAML로도) 붙여넣으면 문서가 스키마를 따르는지 즉시 검사하고, 누락된 required 속성, 잘못된 type, minimum/maximum 범위 초과, email·date-time 같은 format 불일치 등 위반한 규칙을 모두 나열합니다. 각 위반은 문제가 있는 값이 문서의 몇 행 몇 열에 있는지와 그 값의 JSON 포인터 경로가 함께 표시되어 어디를 고쳐야 하는지 바로 알 수 있습니다. YAML로 읽은 문서는 행을 셀 JSON 텍스트가 없어 JSON 포인터로만 위치를 알려 줍니다.

draft-03부터 2020-12까지 지원

JSON Schema draft 2020-12, 2019-09, draft-07, draft-06, draft-04, draft-03을 모두 지원합니다. 기본으로는 스키마의 $schema URI를 보고 드래프트를 고르고, $schema가 없으면 draft-07로 검증합니다. 드래프트 선택에서 다른 것을 지정할 수 있으며, 어떤 드래프트로 왜 검증했는지는 결과 아래에 적힙니다. 검증은 Ajv로 브라우저에서 전부 처리되므로 데이터와 스키마가 기기를 떠나지 않습니다. 스키마만 있어도 시작할 수 있습니다. 이 스키마로 예시 문서 만들기를 누르면 스키마의 키·타입·enum·형식·범위를 따르는 예시가 문서 칸에 들어가고 바로 검사됩니다. pattern은 채우지 않으므로 pattern이 있는 필드는 위반으로 나옵니다. 그런 필드는 직접 고치세요. .json이나 .yaml 파일은 파일 열기 말고 어느 칸에든 끌어다 놓아도 됩니다.

자주 묻는 질문

어떤 JSON 스키마 draft를 지원하나요?

draft 2020-12, 2019-09, draft-07, draft-06, draft-04, draft-03을 지원합니다. 스키마의 $schema URI를 읽어 알맞은 Ajv 빌드를 자동으로 사용하며, $schema가 없으면 draft-07로 검증합니다. 드래프트 선택에서 하나를 고르면 $schema와 상관없이 그 드래프트로 검증합니다. Ajv에는 draft-04·draft-03용 빌드가 없어서, 이 두 드래프트의 스키마는 컴파일 전에 draft-06으로 옮겨 씁니다 — id는 $id로, 불리언 exclusiveMinimum은 경곗값 자체로 바꾸는 식입니다.

왜 첫 오류에서 멈추지 않고 모든 오류를 나열하나요?

Ajv를 allErrors 옵션으로 실행해 한 번에 모든 위반을 모으기 때문입니다. 각 항목은 JSON 포인터 경로(예: /user/email)와 Ajv가 직접 쓴 위반 설명으로 함께 표시되므로, 하나 고치고 다시 돌리기를 반복하지 않아도 됩니다. 그 설명은 검증기가 영어로 쓴 문장을 옮기지 않고 그대로 보여 주는 것이라 이 한국어 페이지에서도 영문으로 나오며, 어디를 고쳐야 하는지는 행·열과 경로가 알려 줍니다.

긴 문서에서 위반 위치를 어떻게 찾나요?

각 항목에는 그 값이 있는 행과 열이 먼저 나오고 — 속성이라면 찾아볼 자리인 키의 위치입니다 — 이어서 같은 위치를 /user/email 같은 JSON 포인터로 적습니다(YAML로 읽은 문서에는 JSON 포인터만 나옵니다). 스키마가 허용하지 않는 키는 그 키를 감싼 객체가 아니라 키 자체를 가리키며, 복사한 보고서에도 행과 열이 함께 들어갑니다.

YAML도 읽고, 다른 스키마를 가리키는 $ref도 풀고, 문서 여러 개를 한꺼번에 검사할 수 있나요?

네. 문서 형식과 스키마 형식에서 각 칸을 JSON 대신 YAML로 읽게 할 수 있습니다. “$ref가 가리키는 다른 스키마” 칸에 스키마를, 여럿이면 [ … ] 목록으로, 각각 $id를 붙여 넣으면 https://example.com/address.json 같은 $ref가 그 스키마로 풀립니다. “문서 여러 개”를 체크하면 문서 칸을 줄마다 문서가 들어 있는 JSON Lines로, YAML이면 --- 로 나눈 문서들로 읽습니다. 결과에는 일치하지 않는 문서가 몇 개인지 나오고, 실패한 문서마다 번호(JSON Lines라면 행도)를 앞에 붙입니다. JSON이 아닌 줄은 그 줄만 실패하고 나머지는 그대로 검사하며, 복사와 다운로드에는 실패한 문서가 전부 들어갑니다.

내 스키마로 예시 문서를 만들어 줄 수 있나요?

네 — 이 스키마로 예시 문서 만들기를 누르세요. 문서 칸에 스키마가 나열한 모든 속성과 그 밖의 필수 키를 담은 문서가 들어갑니다. 스키마에 const·default·examples나 enum이 있으면 그 값(enum은 첫 값)을 쓰고, format마다 정해 둔 예시 값, minimum·maximum(그리고 multipleOf) 안의 숫자, 범위 안의 길이와 항목 수를 채우며, 문서 안의 $ref, allOf, 그리고 oneOf·anyOf의 첫 갈래를 따라갑니다. 페이지는 곧바로 그 문서를 검사합니다. pattern은 채우지 않으므로 pattern이 있는 필드는 위반으로 나오며, 그런 필드는 직접 고쳐야 합니다. 예시 하나에 담을 수 있는 것보다 많이 요구하는 스키마는 중간에 멈추고 그렇다고 알려 줍니다.