>_toolkitbox

~/tools / JSON Schema Validator

JSON Schema Validator — JSON을 JSON Schema로 검사

JSON 데이터를 JSON Schema에 비추어 검사하고, 문제마다 위치(경로)와 어긴 규칙을 보여줍니다. Draft 2020-12의 주요 키워드를 다룹니다. AI 모델의 구조화된 출력을 확인할 때도 유용합니다. 입력한 내용은 브라우저 밖으로 나가지 않습니다.

지원하는 키워드는 JSON Schema Draft 2020-12를 따릅니다. $ref는 같은 스키마 안에서만 읽습니다.

모든 처리는 브라우저 안에서 이루어집니다. 스키마와 데이터는 업로드되지 않습니다.

JSON Schema는 올바른 JSON이 어떤 모습인지, 즉 타입, 필수 속성, 허용되는 값과 범위를 기술합니다. 이 도구는 JSON 한 덩어리를 스키마에 비추어 검사하고, 모든 문제를 데이터 안의 위치와 어긴 스키마 키워드와 함께 나열합니다. AI API는 모델의 응답을 스키마에 맞게 제한할 수 있지만, 응답의 값이 틀리거나 거부되거나 중간에 잘릴 수 있으므로 직접 확인해 두는 편이 좋습니다. format처럼 이 도구가 검사하지 않는 키워드는 스키마에 쓰였을 때 따로 알려 주므로, 통과했다는 결과가 보이는 것보다 약한 검사였다는 사실을 모르고 넘어가는 일은 없습니다.

이럴 때 사용

  • AI 모델의 구조화된 출력이 지정한 스키마와 맞는지 확인하기
  • API에 쓰기 전에 스키마를 올바른 샘플과 잘못된 샘플 몇 개로 시험해 보기
  • 큰 JSON 문서에서 어느 속성이 규칙을 어기는지 찾기

사용법

  1. 왼쪽에 스키마, 오른쪽에 JSON 데이터를 붙여넣거나 예시를 불러옵니다.
  2. 결과를 확인합니다. 통과이거나, 데이터 안의 경로와 어긴 규칙이 적힌 문제 목록이 표시됩니다.
  3. 검증하지 않은 키워드에 대한 안내가 나타나면 함께 확인합니다.

스키마가 검사하는 것과 검사하지 않는 것

  • properties는 존재하는 속성만 검사합니다. 속성은 이름이 required에 있을 때만 필수이므로, 목록에 없는 속성은 빠져 있어도 됩니다.
  • additionalProperties는 properties와 patternProperties 어느 쪽에도 해당하지 않는 이름에 적용됩니다. 생략하면 추가 속성이 허용됩니다.
  • integer는 소수부가 0인 모든 숫자와 일치합니다.
  • pattern은 ECMA-262 정규 표현식이며 앵커가 걸리지 않습니다. 패턴 b는 문자열 abc와 일치합니다. 문자열 전체가 일치해야 한다면 ^와 $를 붙이세요.
  • minLength와 maxLength는 RFC 8259가 정의하는 방식으로 문자를 세므로, 이모지는 1로 셉니다.
  • format은 기본적으로 주석이며 검사는 선택 사항입니다. 이 도구는 검사하지 않고, 스키마에 쓰였을 때 그 사실을 알려 줍니다.
  • 알 수 없는 키워드는 주석으로 다루므로, requierd처럼 철자가 틀린 키워드는 무시되고 스키마를 실패시키지 않습니다.

배열: 2020-12와 이전 드래프트

드래프트앞쪽 항목의 스키마나머지의 스키마
2020-12prefixItemsitems
draft-07 및 이전배열 형태의 itemsadditionalItems

이 도구는 두 형식을 모두 읽습니다. 2020-12에서는 items: false가 additionalItems: false를 대신합니다.

AI의 구조화된 출력 기능이 받아들이는 것

벤더마다 JSON Schema의 일부만 받아들이며, 세 곳의 문서화 방식도 서로 다릅니다.

벤더문서에 적힌 내용
OpenAI루트는 객체여야 합니다. 모든 속성이 required에 나열되어야 하고(선택적인 값은 null도 허용하는 타입으로 씁니다), 모든 객체에 additionalProperties: false가 필요합니다. allOf, not, dependentRequired, dependentSchemas, if/then/else는 지원하지 않습니다.
AnthropicadditionalProperties는 false여야 합니다. 재귀 스키마, minimum, maximum, multipleOf, minLength, maxLength, 그리고 0이나 1이 아닌 배열의 minItems는 지원하지 않습니다. 지원하지 않는 기능을 쓰면 400 오류가 반환됩니다.
Google GeminiJSON Schema의 일부만 지원합니다. minLength, maxLength, minProperties, maxProperties, uniqueItems, contains, minContains, maxContains는 오류를 내지 않고 제거되어 무시됩니다.

이 검증기를 통과한 스키마도 벤더의 기능에서는 거부되거나 일부만 적용될 수 있습니다. 벤더의 문서를 확인하고, 응답은 직접 검증하세요.

응답은 직접 검증하자

  • Google은 출력이 스키마와 맞아도 의미가 틀릴 수 있다고 하며, 애플리케이션에서 값을 검증하라고 안내합니다.
  • Anthropic은 enum이나 const 값이 오류 없이 대소문자만 다르게 돌아올 수 있다고 알립니다.
  • OpenAI는 거부(refusal) 응답이 스키마를 따르지 않을 수 있고, 최대 토큰 한도에서 잘린 응답은 불완전하다고 말합니다.
  • Anthropic은 max_tokens에서 잘린 응답이 스키마와 맞지 않을 수 있다고 말합니다. 파싱하기 전에 모델이 왜 멈췄는지 확인하세요.

출처 (2026-10-23 확인): JSON Schema 2020-12: Core / JSON Schema 2020-12: Validation / JSON Schema 2020-12: Release notes / OpenAI: Structured Outputs / Anthropic: Structured outputs / Google AI for Developers: Structured output

FAQ

어느 버전의 JSON Schema를 따르나요?

Draft 2020-12입니다. draft-07의 오래된 배열 형식, 즉 items가 배열이고 나머지를 additionalItems가 다루는 형식도 읽습니다. 같은 스키마 안의 정의($defs 또는 definitions)를 가리키는 $ref는 처리하며, 외부 스키마는 가져오지 않습니다.

어떤 키워드를 검사하나요?

type, enum, const, 숫자와 문자열의 한도, pattern, 배열 키워드(items, prefixItems, minItems, maxItems, uniqueItems, contains), 객체 키워드(properties, patternProperties, additionalProperties, required, propertyNames, dependentRequired 등), allOf, anyOf, oneOf, not, if/then/else를 검사합니다.

검사하지 않는 것은 무엇인가요?

format, unevaluatedProperties, unevaluatedItems, $dynamicRef, contentMediaType은 검사하지 않습니다. JSON Schema는 format을 기본적으로 주석(annotation)으로 다루며, 검사는 선택 사항입니다. 스키마에 이들 중 하나가 쓰이면 도구가 그 사실을 알려 줍니다.

키워드 철자가 틀려도 왜 오류가 나지 않나요?

JSON Schema는 알 수 없는 키워드를 주석으로 다루므로, requierd 같은 오타는 무시되고 스키마는 그대로 통과합니다. 존재하지 않는 type처럼 이 도구가 아는 키워드에 잘못된 값이 들어 있으면 알려 주지만, 다른 단어를 쓰려던 것인지까지는 알 수 없습니다.

여기서 통과한 스키마가 AI 벤더의 구조화된 출력에서도 동작하나요?

꼭 그렇지는 않습니다. 벤더마다 JSON Schema의 일부만 지원합니다. OpenAI는 모든 속성을 required에 넣고 additionalProperties를 false로 하도록 요구하고, Anthropic은 숫자나 문자열의 길이 제한을 지원하지 않으며, Gemini는 몇몇 키워드를 무시합니다. 도구 아래의 벤더별 설명을 확인하세요.

데이터가 서버로 전송되나요?

아니요. 스키마와 데이터 모두 브라우저 안에서 검사합니다.

관련 도구