Skip to content

Walidator JSON Schema

Sprawdź dane JSON względem dowolnego JSON Schema natychmiast w przeglądarce. Obsługa Draft 2020-12, 2019-09 i Draft-07 z dokładnymi ścieżkami błędów. 100% prywatnie — bez wysyłania, bez konta, za darmo.

Bez śledzenia Działa w przeglądarce Bezpłatne
Wklej dane JSON i schemat
Sprawdzono pod kątem zgodności z Draft 2020-12, 2019-09 i Draft-07, w tym przypadków brzegowych koercji typów, słownictwa format, rozwiązywania $ref oraz ścieżek błędów w JSON Pointer. — Go Tools API Tooling Team · May 7, 2026

Czym jest walidator JSON Schema?

Walidator JSON Schema to program, który bierze dwa dokumenty JSON — dokument danych i dokument schematu — i raportuje, czy dane spełniają kontrakt schematu. Schemat deklaruje typy pól, klucze required, zakresy wartości, dopuszczalne wartości enum, wzorce regex i reguły strukturalne, używając stałego słownictwa (type, properties, required, items, enum, oneOf, allOf, $ref, format). Walidator równolegle obchodzi oba dokumenty i emituje zero lub więcej błędów, każdy przypięty do ścieżki JSON Pointer wewnątrz danych.

Walidacja działa w runtime, na granicy między niezaufanym wejściem a Twoim kodem. Typy TypeScript znikają w czasie kompilacji i nie pomogą z JSON-em przylatującym z webhooka, zewnętrznego API albo wklejki użytkownika — tę lukę wypełnia właśnie JSON Schema. Połącz to z TypeScriptem (lub Pydantic w Pythonie), a otrzymasz gwarancje compile-time wewnątrz bazy kodu plus gwarancje runtime na granicy.

Draft 2020-12 to aktualna specyfikacja i właściwy wybór dla nowych projektów w 2026. Wcześniejsze drafty (2019-09, Draft-07, Draft-06, Draft-04) nadal są obecne w starszych bazach kodu — Draft-07 wciąż jest powszechny w Helm charts, ustawieniach VS Code i starszych konfiguracjach Ajv. OpenAPI 3.1 natywnie używa Draft 2020-12; OpenAPI 3.0 używa podzbioru Draft 4.

To narzędzie działa w całości w przeglądarce. Twój JSON, schemat i wynik walidacji nigdy nie opuszczają Twojej maszyny — bezpieczne dla zastrzeżonych kontraktów API i wrażliwych ładunków. Wewnętrzne wskaźniki $ref rozwiązują się automatycznie; zewnętrzne referencje HTTP są celowo wyłączone, aby zachować prywatność.

Pracujesz z sąsiednimi narzędziami JSON? Sformatuj JSON za pomocą formatowania JSON przed wklejeniem; porównaj dwa dokumenty JSON za pomocą JSON Diff; konwertuj za pomocą JSON na YAML i YAML na JSON. Pełną walidację w Node, Pythonie i przeglądarce omawia nasz przewodnik walidacji JSON Schema.

// A 5-line schema that catches three real bugs
const schema = {
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id":    { "type": "integer", "minimum": 1 },
    "email": { "type": "string", "format": "email" },
    "age":   { "type": "integer", "minimum": 0, "maximum": 150 }
  },
  "required": ["id", "email"],
  "additionalProperties": false
};

// Three bugs the schema catches:
const bad = { "id": "42", "age": 200 };
//   /id   → type: expected integer, got string
//   /email → required: missing
//   /age   → maximum: 200 > 150

// In Node:        new Ajv().compile(schema)(bad)  // false; ajv.errors has the paths
// In Python:      jsonschema.validate(bad, schema)
// In the browser: this tool — same errors, same paths, no install

Główne funkcje

Obsługa wielu draftów

Draft 2020-12 (domyślny), 2019-09 i Draft-07. Automatycznie wykrywa wersję z URI $schema; ręczny selektor dla schematów bez niego.

Dokładne ścieżki błędów

Każdy błąd zawiera JSON Pointer (np. /user/email/0), naruszone keyword (type, required, pattern) i jednolinijkowy komunikat. Kliknij, aby przeskoczyć do miejsca.

Walidacja na żywo

Sprawdza podczas pisania. Błędy aktualizują się w czasie rzeczywistym, więc iterujesz po schemacie lub danych bez okrążania przez przyciski Waliduj.

Pokrycie keyword'ów format

email, uri, uuid, date, date-time, ipv4, ipv6, hostname, regex — formaty, których naprawdę używasz, walidowane sprawdzonymi w boju wzorcami.

100% w przeglądarce

Wejścia nigdy nie opuszczają Twojej maszyny. Bez wysyłania, bez analityki tego, co wklejasz, bez localStorage dla JSON. Bezpieczne dla zastrzeżonych kontraktów i wrażliwych ładunków.

Przykładowe schematy jednym kliknięciem

Gotowe presety (formularz rejestracji, koperta webhooka, plik konfiguracyjny, tablica zamówień) doprowadzają do działającej walidacji w mniej niż pięć sekund.

Przykłady

Poprawny obiekt — required + typy

{
  "id": 42,
  "email": "alice@example.com",
  "age": 30
}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": { "type": "integer", "minimum": 1 },
    "email": { "type": "string", "format": "email" },
    "age": { "type": "integer", "minimum": 0, "maximum": 150 }
  },
  "required": ["id", "email"],
  "additionalProperties": false
}

Schemat deklaruje id i email jako required oraz wymusza typy. Powyższe dane przechodzą walidację — każde ograniczenie jest spełnione. Spróbuj usunąć email albo zmienić id na ciąg, aby zobaczyć dokładne ścieżki błędów.

Niepoprawne — brak required + zły typ

{
  "id": "42",
  "age": 200
}
{
  "type": "object",
  "properties": {
    "id": { "type": "integer" },
    "email": { "type": "string", "format": "email" },
    "age": { "type": "integer", "maximum": 150 }
  },
  "required": ["id", "email"]
}

Trzy błędy: /id to ciąg, nie integer; /email brakuje; /age (200) przekracza maximum 150. Każdy błąd zwraca dokładną ścieżkę JSON Pointer, więc wiesz, co poprawić w danych — albo poluzować w schemacie — bez zgadywania.

Unia dyskryminowana — oneOf z const

{
  "type": "order.created",
  "data": { "orderId": "ORD-001234", "totalUsd": 49.99 }
}
{
  "oneOf": [
    {
      "properties": {
        "type": { "const": "order.created" },
        "data": {
          "type": "object",
          "properties": {
            "orderId": { "type": "string", "pattern": "^ORD-[0-9]{6}$" },
            "totalUsd": { "type": "number", "minimum": 0 }
          },
          "required": ["orderId", "totalUsd"]
        }
      },
      "required": ["type", "data"]
    },
    {
      "properties": {
        "type": { "const": "order.refunded" },
        "data": { "type": "object", "required": ["refundId"] }
      },
      "required": ["type", "data"]
    }
  ]
}

Walidacja koperty webhooka. Pierwsza gałąź oneOf pasuje, bo type to "order.created". Zmień type na "order.refunded" lub złam wzorzec orderId, aby zobaczyć, jak oneOf raportuje porażki w każdej gałęzi.

Tablica obiektów — items + uniqueItems

[
  { "sku": "A1", "qty": 3 },
  { "sku": "B2", "qty": 5 },
  { "sku": "A1", "qty": 3 }
]
{
  "type": "array",
  "minItems": 1,
  "uniqueItems": true,
  "items": {
    "type": "object",
    "properties": {
      "sku": { "type": "string", "pattern": "^[A-Z][0-9]+$" },
      "qty": { "type": "integer", "minimum": 1 }
    },
    "required": ["sku", "qty"]
  }
}

Dwa elementy są bajt po bajcie identyczne, więc uniqueItems się aktywuje. Elementy 0 i 2 kolidują — walidator raportuje duplikat w korzeniu tablicy. Przydatne do wykrywania duplikatów wierszy koszyka i błędów scalania w żądaniach wysyłkowych.

Jak używać

  1. 1

    Wklej swój JSON Schema

    Wrzuć schemat do prawego pola. Walidator automatycznie wykrywa wersję z URI $schema, jeśli jest obecny; w przeciwnym razie wybierz Draft 2020-12, 2019-09 lub Draft-07 z paska narzędzi.

  2. 2

    Wklej swoje dane JSON

    Wrzuć dokument JSON, który chcesz sprawdzić, do lewego pola. Walidacja działa podczas pisania; duże wejścia (>200 KB) przełączają się na ręczny przycisk Waliduj, aby pisanie pozostało płynne.

  3. 3

    Czytaj listę błędów

    Każdy błąd ma ścieżkę JSON Pointer, keyword i jednolinijkowy komunikat. Kliknij błąd, aby przeskoczyć do miejsca w danych, popraw go i obserwuj, jak licznik spada w czasie rzeczywistym.

Typowe pułapki JSON Schema

Type: integer vs number

JSON Schema traktuje 1.0 jako number, ale nie integer. Jeśli kontrakt mówi integer, walidator odrzuca 1.0 — choć większość języków uważa to za równe 1. Wybieraj number, chyba że naprawdę potrzebujesz integer.

✗ Niepoprawne
{ "qty": 1.0 }   schema: { "type": "integer" }   → error: not an integer
✓ Poprawne
{ "qty": 1 }     schema: { "type": "integer" }   → valid

required na złym poziomie zagnieżdżenia

required musi sąsiadować z properties, nie znajdować się wewnątrz jednego z nich. Tablica required wewnątrz deklaracji właściwości jest milcząco ignorowana — walidator nigdy jej nie egzekwuje.

✗ Niepoprawne
{ "properties": { "name": { "type": "string", "required": true } } }
✓ Poprawne
{ "properties": { "name": { "type": "string" } }, "required": ["name"] }

additionalProperties domyślnie true

Bez additionalProperties: false schemat jest otwarty — każdy dodatkowy klucz przechodzi. Pomijanie tego jest najczęstszym powodem, dla którego schematy „akceptują wszystko”.

✗ Niepoprawne
{ "properties": { "id": { "type": "integer" } } }   accepts: { "id": 1, "foo": "bar", "x": null }
✓ Poprawne
{ "properties": { "id": { "type": "integer" } }, "additionalProperties": false }

OpenAPI 3.0 nullable vs Draft 2020-12 type array

OpenAPI 3.0 używa nullable: true; Draft 2020-12 używa type: ["string", "null"]. Mieszanie ich daje schematy, które wyglądają poprawnie, ale nigdy nie pozwalają na null.

✗ Niepoprawne
{ "type": "string", "nullable": true }   in 2020-12: nullable is just an unknown keyword
✓ Poprawne
{ "type": ["string", "null"] }   in 2020-12: explicitly allows null

Pattern bez kotwic

Regex w JSON Schema domyślnie dopasowuje gdziekolwiek — pattern: "^[A-Z]+$" kotwiczy się do całego ciągu, ale pattern: "[A-Z]+" pasuje, jeśli gdziekolwiek występuje wielka litera.

✗ Niepoprawne
pattern: "[A-Z]+"   accepts: "helloX"   (because X matches)
✓ Poprawne
pattern: "^[A-Z]+$"   accepts only: "HELLO"

oneOf tam, gdzie chodziło o anyOf

oneOf wymaga, aby pasowała dokładnie jedna gałąź. Jeśli dwie gałęzie akceptują ten sam kształt, oneOf zawodzi na danych, które anyOf przepuściłoby — a komunikat błędu jest mylący („matches more than one”).

✗ Niepoprawne
oneOf: [ { type: "string" }, { type: "string", maxLength: 10 } ]   on: "hi"   → error: matches both
✓ Poprawne
anyOf: [ { type: "string" }, { type: "string", maxLength: 10 } ]   on: "hi"   → valid

Typowe przypadki użycia

Walidacja żądań API
Wklej ciało żądania i schemat endpointa przed wdrożeniem. Wychwyć odpowiedzi 400, których nie pokryły testy — brakujące pola required, błędne typy, liczby poza zakresem.
Weryfikacja ładunków webhooków
Dostawca przysłał ładunek, który Twój handler odrzuca? Zwaliduj rzeczywisty ładunek względem swojego schematu, potem względem opublikowanego schematu dostawcy. Diff między nimi to Twój błąd.
Linting plików konfiguracyjnych
package.json, tsconfig.json, helm values.yaml — każdy plik konfiguracyjny ma publiczny schemat. Wklej schemat, wklej konfigurację, znajdź literówkę. Pomiń metodę prób i błędów.
Testowanie komponentów OpenAPI
Wyciągnij komponent schematu z dokumentu OpenAPI 3.1, wklej tutaj, zwaliduj przykładowe ładunki. Szybciej niż uruchamianie mock servera, deterministycznie, bez SDK.
Pre-flight wysyłki formularza
Wklej przykładowy ładunek formularza zanim podepniesz walidację frontendową. Potwierdź, że schemat odrzuca to, co powinien, akceptuje to, co powinien, a potem wyślij ten sam schemat na klienta i serwer.
Kontrola kontraktu w pipelinie danych
Wynik ETL się rozjechał? Wklej przykładowy wiersz i schemat docelowy. Wskaż, który producent się zmienił i które klucze pękły, zanim pipeline ponowi 10 000 rekordów.

Szczegóły techniczne

Zgodność z Draft 2020-12
Implementuje opublikowaną specyfikację Draft 2020-12 — keyword'y, system typów, słownictwo format. Skontrolowane krzyżowo z wynikami Ajv 8.x i ajv-formats.
Ścieżki błędów w JSON Pointer
Błędy używają JSON Pointer wg RFC 6901 (/user/email/0). Każde naruszenie keyword wskazuje pojedynczą lokalizację w danych — bez niejednoznaczności, bez wyszukiwania po stringu.
Rozwiązywanie wewnętrznych $ref
Rozwiązuje wskaźniki $ref w obrębie jednego dokumentu (#/$defs/foo, #/properties/bar). Cykle wykrywane i raportowane. Zewnętrzne $ref przez HTTP wyłączone dla prywatności.

Najlepsze praktyki

Zawsze ustawiaj additionalProperties: false
Na kontraktach wejściowych (ciała żądań, pliki konfiguracyjne, wiadomości w kolejce) nieznane klucze to zwykle błędy — literówki, przypadkowe pola lub sondowanie napastnika. Odrzucaj je domyślnie.
Używaj $defs do reużywalnych podschematów
Wklej ten sam kształt dwa razy, a się rozjadą. Przenieś wspólne definicje do $defs i odwołuj się przez $ref — jedno źródło prawdy, każda zmiana propaguje się wszędzie.
Waliduj przed logiką biznesową
Uruchamiaj walidację schematu zaraz po JSON.parse, zanim dotkniesz sparsowanej struktury. Zawężanie typów, ustawianie wartości domyślnych i zapis zakładają, że kontrakt się trzyma — upewnij się, że tak jest.

Często zadawane pytania

Czym jest walidacja JSON Schema?
Walidacja JSON Schema sprawdza, czy dokument JSON pasuje do kontraktu zapisanego w składni JSON Schema. Schemat deklaruje typy pól, klucze required, dozwolone wartości i reguły strukturalne; walidator równolegle obchodzi oba dokumenty i raportuje każdą ścieżkę, która łamie kontrakt. Działa na granicy między niezaufanym wejściem (żądanie API, webhook, plik konfiguracyjny, ładunek formularza) a logiką biznesową — łapie błędy struktury, zanim zepsują kod w dół. Zobacz nasz kompletny przewodnik po walidacji JSON Schema z gotowymi przykładami w Node, Pythonie i przeglądarce.
Które wersje JSON Schema obsługuje ten walidator?
Draft 2020-12 (domyślny i zalecany), Draft 2019-09 oraz Draft-07. Walidator automatycznie wykrywa wersję na podstawie URI $schema, jeśli jest obecny; w przeciwnym razie używa wyboru z listy rozwijanej. W nowych projektach w 2026 wybieraj Draft 2020-12 — z niego natywnie korzysta OpenAPI 3.1 i Ajv. Draft-07 nadal jest powszechny w starszych bazach kodu (starsze konfiguracje AJV, Helm charts, ustawienia VS Code).
Jak sprawdzić JSON względem schematu?
Wklej dane JSON do lewego pola, a JSON Schema do prawego. Walidator uruchamia się natychmiast podczas pisania — zielony znacznik oznacza poprawność, czerwona lista oznacza błędy. Każdy błąd zawiera ścieżkę JSON Pointer (np. /user/email), naruszone keyword (type, required, pattern, minimum) oraz czytelny komunikat. Kliknij dowolny błąd, aby przeskoczyć do problematycznego wiersza. Bez wysyłania, bez rejestracji.
Jaka jest różnica między walidacją JSON Schema a walidacją składni JSON?
Walidacja składni JSON sprawdza tylko, czy dokument się parsuje — bez nadmiarowych przecinków, bez brakujących nawiasów. Tym zajmuje się formatowanie JSON. Walidacja JSON Schema działa po parsowaniu i sprawdza, czy sparsowana struktura pasuje do kontraktu: czy pola required są obecne, czy typy są poprawne, czy wartości mieszczą się w zakresie. Zwykle uruchamia się obie — najpierw format, aby potwierdzić możliwość parsowania, potem walidację względem schematu.
Dlaczego mój schemat odrzuca JSON, który wygląda poprawnie?
Pięć typowych przyczyn: (1) additionalProperties: false — dane mają klucz, którego schemat nie zadeklarował, często literówka lub nowe pole; (2) type: "integer" vs "number" — JSON Schema traktuje 1.0 jako number, nie integer; (3) keyword'y format (email, uri, uuid) odrzucają niepoprawne ciągi nawet jeśli wyglądają sensownie; (4) required na złym poziomie zagnieżdżenia — required musi sąsiadować z properties, nie znajdować się wewnątrz jednego z nich; (5) JSON ma ciąg "42" tam, gdzie schemat oczekuje integer 42. Ścieżka błędu wskaże, która z tych przyczyn zachodzi.
Czy obsługujesz $ref i zdalne referencje schematów?
Wewnętrzne wskaźniki $ref (#/$defs/foo, #/properties/bar) działają od ręki. Zdalny $ref do zewnętrznych URL jest celowo wyłączony — pobieranie zewnętrznych schematów ujawniałoby Twoją aktywność walidacji stronom trzecim i łamałoby model prywatności. Aby walidować względem schematu rozłożonego na wiele plików, wstaw definicje wewnątrz jednego dokumentu przez $defs, albo uruchom walidację we własnym CI z Ajv, gdzie zdalne referencje są na miejscu.
Co robi additionalProperties: false?
additionalProperties: false odrzuca każdy klucz, który nie został zadeklarowany w properties. To pojedynczo najużyteczniejsze keyword do zacieśniania kontraktów — bez niego schematy są domyślnie otwarte i milcząco akceptują źle zapisane lub złośliwe pola. Zawsze ustawiaj additionalProperties: false na kontraktach wejściowych (ciała żądań, pliki konfiguracyjne, wiadomości w kolejce). Zostaw true (lub pomiń) tylko wtedy, gdy schemat opisuje fragment większego dokumentu.
Jak walidować JSON względem schematu w Node.js lub Pythonie?
Node: zainstaluj Ajv (npm i ajv ajv-formats), wywołaj new Ajv().compile(schema), potem validate(data). Python: zainstaluj jsonschema (pip install jsonschema), wywołaj jsonschema.validate(data, schema). W TypeScript wygeneruj typy ze schematu przez json-schema-to-typescript, aby compile-time i runtime pozostały spójne. Nasz przewodnik walidacji JSON Schema zawiera gotowe przepisy dla Node, Pythona i przeglądarki.
Jaka jest różnica między oneOf, anyOf i allOf?
allOf — musi pasować do każdego podsschematu (przecięcie, używane do kompozycji). anyOf — musi pasować do co najmniej jednego (suma, fast-fail). oneOf — musi pasować dokładnie do jednego (unia dyskryminowana, wolniejsza, ale ściślejsza). Używaj oneOf dla unii dyskryminowanych, jak zdarzenia webhook tagowane przez type; anyOf — dla unii pobłażliwych; allOf — do rozszerzania bazowego schematu o dodatkowe ograniczenia. oneOf jest najwolniejsze, bo testuje każdą gałąź — wybieraj anyOf, gdy nie wymagasz dokładnie-jednej.
Czy obsługuje schematy OpenAPI?
OpenAPI 3.1 natywnie używa Draft 2020-12, więc dowolny komponent schematu OpenAPI 3.1 wkleja się bezpośrednio. OpenAPI 3.0 używa podzbioru Draft 4, w większości zgodnego — możesz natknąć się na przypadki brzegowe wokół nullable: true (składnia 3.0), które Draft 2020-12 wyraża jako type: ["string", "null"]. Do pełnej walidacji dokumentu OpenAPI (paths, operations, security) użyj dedykowanego linterа OpenAPI takiego jak Spectral; to narzędzie skupia się na części schematu.
Dlaczego walidator twierdzi, że mój JSON Schema sam jest niepoprawny?
JSON Schema to dokument JSON, który musi być poprawnym JSON, zanim stanie się poprawnym schematem. Typowe przyczyny: przecinek kończący w obiekcie properties, pojedyncze cudzysłowy zamiast podwójnych, $schema ustawione na nieistniejący URL draftu albo required wpisane jako ciąg zamiast tablicy. Najpierw sformatuj schemat w formatowaniu JSON, aby ujawnić problemy składniowe, a potem wklej go z powrotem tutaj do walidacji semantycznej.
Czy narzędzie wysyła mój JSON lub schemat na serwer?
Nie. Całe parsowanie i walidacja działają lokalnie w przeglądarce. Twój JSON, schemat i wyniki walidacji nigdy nie opuszczają Twojej maszyny — bez wysyłania, bez localStorage dla wejść, bez analityki tego, co wklejasz. Bezpieczne dla zastrzeżonych kontraktów API, wewnętrznych plików konfiguracyjnych i wrażliwych ładunków. Tylko wybór draftu zostaje w localStorage, aby przetrwał odświeżenie; wyczyść dane przeglądarki, aby go usunąć.
Czy mogę walidować JSON Lines (NDJSON) lub wiele dokumentów?
To narzędzie waliduje jeden dokument na uruchomienie. W przypadku JSON Lines waliduj każdą linię osobno albo użyj Ajv w Node ze schematem i parserem strumieniowym takim jak JSONStream. Do walidacji wsadowej dużych zbiorów danych preferuj wiersz poleceń — ajv-cli lub check-jsonschema (Python) obsługują tysiące plików na sekundę przy pojedynczej kompilacji schematu.

Powiązane narzędzia

Zobacz wszystkie narzędzia →