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.
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
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
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
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.
{ "qty": 1.0 } schema: { "type": "integer" } → error: not an integer { "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.
{ "properties": { "name": { "type": "string", "required": true } } } { "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”.
{ "properties": { "id": { "type": "integer" } } } accepts: { "id": 1, "foo": "bar", "x": null } { "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.
{ "type": "string", "nullable": true } in 2020-12: nullable is just an unknown keyword { "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.
pattern: "[A-Z]+" accepts: "helloX" (because X matches)
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”).
oneOf: [ { type: "string" }, { type: "string", maxLength: 10 } ] on: "hi" → error: matches both 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?
Które wersje JSON Schema obsługuje ten walidator?
Jak sprawdzić JSON względem schematu?
Jaka jest różnica między walidacją JSON Schema a walidacją składni JSON?
Dlaczego mój schemat odrzuca JSON, który wygląda poprawnie?
Czy obsługujesz $ref i zdalne referencje schematów?
Co robi additionalProperties: false?
Jak walidować JSON względem schematu w Node.js lub Pythonie?
Jaka jest różnica między oneOf, anyOf i allOf?
Czy obsługuje schematy OpenAPI?
Dlaczego walidator twierdzi, że mój JSON Schema sam jest niepoprawny?
Czy narzędzie wysyła mój JSON lub schemat na serwer?
Czy mogę walidować JSON Lines (NDJSON) lub wiele dokumentów?
Powiązane narzędzia
Zobacz wszystkie narzędzia →Koder i dekoder Base64
Kodowanie i formatowanie
Zakoduj i zdekoduj Base64 online za darmo. Konwersja w czasie rzeczywistym z pełną obsługą UTF-8 i emoji. 100% w przeglądarce, bez rejestracji.
JSON Diff (Porównaj)
Kodowanie i formatowanie
Porównaj dwa pliki JSON natychmiast w przeglądarce. Podświetlanie obok siebie, wynik JSON Patch (RFC 6902), ignorowanie szumliwych pól jak znaczniki czasu i identyfikatory. 100% prywatności, bez przesyłania.
Formatowanie i walidacja JSON
Kodowanie i formatowanie
Formatuj, waliduj i upiększaj JSON w przeglądarce. Bezpłatne narzędzie z kontrolą składni, wykrywaniem błędów i minifikacją. 100% prywatnie.
Konwerter JSON na YAML
Kodowanie i formatowanie
Wklej JSON, uzyskaj YAML natychmiast. Konwersja na żywo w przeglądarce. Obsługa K8s i Compose, wcięcia 2/4 spacje, bezpieczne cytowanie Norway. 100% prywatnie.
Generator kodów QR — URL, WiFi, vCard, e-mail, SMS, geo
Kodowanie i formatowanie
Darmowy generator kodów QR. Twórz statyczne kody QR dla URL, WiFi, vCard, e-mail i SMS. Pobieranie SVG i PNG. Bez wygaśnięcia, bez rejestracji, 100% w twojej przeglądarce.
Koder i dekoder URL z wbudowanym parserem URL
Kodowanie i formatowanie
Dekoduj i koduj adresy URL z wbudowanym parserem URL. Tryb podwójny: encodeURI i encodeURIComponent. 100% prywatnie, bez wysyłki na serwer.