DevToolPal
한국어

JSON Schema 검사기

JSON 데이터를 JSON Schema(2020-12, 2019-09, Draft-07, Draft-04)로 검사하고 모든 오류를 경로와 함께 보여 줍니다.

로컬에서 실행, 업로드 없음

옵션

JSON 데이터

JSON Schema

검사 결과

결과가 여기에 표시됩니다

기능

JSON Schema는 JSON 데이터의 구조를 설명하는 규격입니다. 객체에 있어야 할 속성, 각 값의 타입, 허용 범위와 패턴, 배열 길이 등을 정의합니다. API의 OpenAPI 명세, 설정 파일 자동 완성을 제공하는 편집기, 잘못된 요청을 거부하는 백엔드에서 널리 쓰입니다.

이 검사기는 JSON 문서를 스키마로 검사하고 찾은 문제를 모두 나열합니다. 각 오류에는 데이터 안의 위치(/tags/1 같은 JSON Pointer), 읽기 쉬운 메시지, 실패한 스키마 키워드가 표시되어 데이터나 스키마를 빠르게 고칠 수 있습니다. 2020-12, 2019-09, Draft-07, Draft-04를 지원하며 $ref, $defs, allOf/anyOf/oneOf, if/then/else, unevaluatedProperties, 형식 검사도 처리합니다.

사용 방법

  1. JSON 데이터에 데이터를, JSON Schema에 스키마를 붙여 넣거나 각각 파일을 업로드합니다. 예제를 누르면 일부러 몇 군데 틀린 사용자 레코드를 불러옵니다.
  2. 결과는 입력하는 대로 갱신됩니다. 데이터가 유효하면 초록색 배지가, 아니면 오류 개수와 목록이 표시됩니다.
  3. 드래프트를 자동으로 두면 $schema를 따르고, 버전을 직접 지정할 수도 있습니다. 모든 오류 표시를 끄면 첫 오류에서 멈춥니다.
  4. 오류 복사는 목록을 일반 텍스트로 복사해 버그 리포트나 코드 리뷰에 붙여 넣을 수 있게 합니다.

어느 한쪽이 올바른 JSON이 아니면 데이터와 스키마 중 어느 쪽이 문제인지와 줄·열 번호를 알려 줍니다.

예시

다음 스키마로:

{
  "type": "object",
  "required": ["id"],
  "properties": {
    "id": { "type": "integer" },
    "age": { "type": "integer", "minimum": 0 }
  }
}

문서 {"age": -1}를 검사하면 오류가 두 개 나옵니다. (루트)에서 필수 속성 id가 없고, /age에서 값이 최솟값 0보다 작습니다.

팁

"additionalProperties": false를 추가하면 철자가 틀린 속성 이름을 잡아낼 수 있습니다. 그렇지 않으면 조용히 통과됩니다. 고정 값에는 enum이나 const를, 제품 코드 같은 문자열에는 pattern을 쓰세요. 스키마가 커지면 반복되는 부분을 $defs로 옮기고 $ref로 참조하세요.

자주 묻는 질문

› 어떤 JSON Schema 버전을 지원하나요?

2020-12, 2019-09, Draft-07(Draft-06 포함), Draft-04를 지원합니다. '드래프트'를 자동으로 두면 스키마의 $schema 키워드로 버전을 판단하고, $schema가 없으면 2020-12로 처리합니다.

› 오류의 경로는 무엇을 뜻하나요?

첫 번째 경로는 데이터에서 검사에 실패한 값을 가리키는 JSON Pointer입니다(예: /items/2/price). '(루트)'는 문서 전체를 뜻합니다. 회색 줄은 실패한 키워드와 스키마 안의 위치입니다(예: minimum · #/properties/age/minimum).

› email이나 date-time 같은 형식도 검사하나요?

네. date, time, date-time, duration, email, hostname, ipv4, ipv6, uri, uri-reference, uuid, regex, json-pointer 등 흔히 쓰는 형식을 검사합니다. 알 수 없는 형식은 사양대로 무시합니다.

› 스키마에서 다른 파일을 참조할 수 있나요?

같은 스키마 안의 참조(예: #/$defs/address를 가리키는 $ref)는 동작합니다. 데이터가 브라우저 밖으로 나가지 않으므로 외부 URL은 내려받지 않습니다. 참조하는 정의는 $defs에 붙여 넣으세요.