ToolDeck

Walidator JSON Schema

Waliduj dane JSON względem schematu JSON Schema (Draft 7)

Wypróbuj przykład

Dane JSON

JSON Schema

Działa lokalnie · Bezpieczne do wklejania sekretów
Działa lokalnie · Bezpieczne do wklejania sekretów

Czym jest walidacja JSON Schema?

Walidacja JSON Schema to proces sprawdzania, czy dokument JSON spełnia zestaw strukturalnych i wartościowych ograniczeń zdefiniowanych w JSON Schema. Sam schemat jest dokumentem JSON opisującym oczekiwaną strukturę danych: które właściwości są wymagane, jakie typy muszą mieć, dozwolone zakresy dla liczb, wzorce łańcuchów, długości tablic i wiele więcej. Specyfikacja JSON Schema jest utrzymywana na json-schema.org i publikowana jako seria projektów IETF — Draft 7 i Draft 2020-12 są najszerzej stosowane.

Zwykła walidacja JSON sprawdza jedynie składnię (czy nawiasy są prawidłowo zagnieżdżone? czy łańcuchy są ujęte w cudzysłów?). Walidacja schematu idzie dalej. Odpowiada na pytania: czy odpowiedź z tego API zawiera pole "id", które zawsze jest liczbą całkowitą? Czy pole "status" przyjmuje jedną z trzech dozwolonych wartości? Czy obiekty zagnieżdżone mają właściwą strukturę? Tego rodzaju weryfikacja strukturalna wychwytuje błędy, które całkowicie umykają sprawdzaniu składni — poprawny składniowo JSON może być semantycznie błędny dla Twojej aplikacji.

JSON Schema jest stosowany w definicjach OpenAPI/Swagger, walidacji plików konfiguracyjnych, walidacji formularzy, ograniczeniach dokumentów bazodanowych i testach automatycznych. Narzędzia takie jak Ajv (JavaScript), jsonschema (Python) i check-jsonschema (CLI) implementują specyfikację, umożliwiając programową walidację danych. Ten walidator online pozwala wkleić zarówno schemat, jak i dokument danych, aby natychmiast sprawdzić zgodność — bez instalowania żadnej biblioteki.

Dlaczego używać walidatora JSON Schema online?

Ręczne pisanie schematów i debugowanie błędów walidacji jest powolne. Walidator JSON Schema online daje natychmiastową informację zwrotną — czy dane pasują do schematu — z czytelnymi komunikatami błędów wskazującymi dokładnie, która właściwość nie spełnia wymagań.

Natychmiastowa informacja zwrotna
Wklej schemat i dane, a wyniki walidacji pojawią się w czasie rzeczywistym. Każdy błąd pokazuje ścieżkę JSON i konkretne ograniczenie, które nie zostało spełnione, dzięki czemu możesz naprawić problem bez przekopywania się przez logi biblioteki.
🔒
Przetwarzanie wyłącznie w przeglądarce
Twoje dane JSON nigdy nie opuszczają przeglądarki. Cała walidacja działa lokalnie w JavaScript. Żadnego serwera, żadnych logów, żadnego przechowywania danych. Bezpieczne dla schematów opisujących wewnętrzne API lub zawierających zastrzeżone nazwy pól.
🎯
Walidacja z obsługą wersji Draft
Walidator obsługuje słowa kluczowe schematu Draft 7, w tym type, required, properties, enum, pattern, minimum/maximum, items, anyOf, oneOf, allOf i additionalProperties. Przetestuj schemat tutaj przed włączeniem go do potoku budowania lub zestawu testów.
📋
Bez konta i instalacji
Otwórz stronę, wklej JSON i przeprowadź walidację. Bez npm install, bez pakietu pip, bez obrazu Docker. Przydatne, gdy potrzebujesz szybkiego sprawdzenia schematu na maszynie, na której nie możesz instalować narzędzi deweloperskich.

Przypadki użycia walidacji JSON Schema

Testowanie kontraktów API
Waliduj odpowiedzi API względem schematu zdefiniowanego w specyfikacji OpenAPI. Wychwytuj przełomowe zmiany — takie jak zmiana pola z integer na string — zanim trafią na produkcję.
Weryfikacja plików konfiguracyjnych
Sprawdzaj, czy pliki konfiguracyjne JSON dla potoków CI/CD, manifestów Kubernetes lub ustawień aplikacji są zgodne z oczekiwanym schematem przed zatwierdzeniem zmian. Zapobiega błędom wdrożenia spowodowanym brakującymi lub błędnie wpisanymi kluczami.
Bramki w potokach DevOps
Dodaj walidację schematu jako krok CI, który odrzuca ładunki naruszające kontrakt. Sprawdza się przy plikach zmiennych Terraform, danych wejściowych GitHub Actions lub dowolnym strukturalnym JSON przetwarzanym przez automatyzację.
Przegląd danych w testach i QA
Sprawdzaj, czy fixtures testowe i pliki z danymi mock są zgodne z tym samym schematem, jakiego oczekuje aplikacja. Niezgodne dane testowe to częsta przyczyna fałszywie pozytywnych wyników testów.
Przetwarzanie danych w potoku
Waliduj przychodzące rekordy JSON na wejściu potoku danych. Walidacja schematu odfiltrowuje zniekształcone zdarzenia, zanim dotrą do hurtowni danych, zmniejszając koszty czyszczenia danych dalej w potoku.
Nauka składni JSON Schema
Eksperymentuj interaktywnie ze słowami kluczowymi schematu. Napisz schemat, wklej dane testowe i sprawdź, które ograniczenia są spełnione, a które nie. Szybsze niż pisanie skryptu i uruchamianie go z terminala za każdym razem.

Słownik słów kluczowych JSON Schema

JSON Schema jest budowany ze słów kluczowych, z których każde nakłada ograniczenie na walidowane dane. Poniższa tabela zawiera najczęściej używane słowa kluczowe w Draft 7 i późniejszych wersjach. Każde słowo kluczowe można łączyć z innymi w tym samym obiekcie schematu.

Słowo kluczoweCelPrzykład
typeRestricts the data type"type": "string"
propertiesDefines expected object keys and their schemas"properties": { "name": { "type": "string" } }
requiredLists mandatory properties"required": ["id", "name"]
itemsSchema for array elements"items": { "type": "number" }
enumRestricts value to a fixed set"enum": ["active", "inactive"]
patternRegex constraint on strings"pattern": "^[A-Z]{2}\\d{4}$"
minimum / maximumNumeric range bounds"minimum": 0, "maximum": 100
minLength / maxLengthString length bounds"minLength": 1, "maxLength": 255
$refReuses another schema by URI"$ref": "#/$defs/address"
additionalPropertiesControls extra keys in objects"additionalProperties": false
anyOf / oneOf / allOfCombines multiple schemas logically"anyOf": [{ "type": "string" }, { "type": "null" }]
if / then / elseConditional schema application"if": { "properties": { "type": { "const": "email" } } }

Porównanie wersji JSON Schema: Draft 7 vs 2019-09 vs 2020-12

JSON Schema przeszło przez kilka wersji roboczych. Draft 7 (opublikowany w 2018 r.) jest najszerzej obsługiwany przez narzędzia. Draft 2019-09 wprowadził $defs (zastępując definitions), unevaluatedProperties i $recursiveRef. Draft 2020-12 (najnowsze stabilne wydanie) zastąpił $recursiveRef przez $dynamicRef i wprowadził prefixItems do walidacji krotek. Wybierając wersję, sprawdź, czy Twoja biblioteka walidacyjna ją obsługuje. Ajv obsługuje wszystkie trzy wersje. Biblioteka jsonschema dla Pythona obsługuje do 2020-12 od wersji 4.0.

FunkcjaDraft 7Draft 2019-09Draft 2020-12
$schema URIdraft-07/schema#2019-09/schema2020-12/schema
if / then / elseYesYesYes
$defs (definitions)definitions$defs$defs
$ref alongside keysNo (sibling ignored)YesYes
$dynamicRefNoNo ($recursiveRef)Yes
prefixItemsNo (use items array)No (use items array)Yes
unevaluatedPropertiesNoYesYes
$vocabularyNoYesYes

Przykłady kodu

Poniższe przykłady pokazują, jak programowo walidować JSON względem schematu. Każdy używa dobrze utrzymywanej biblioteki dla danego ekosystemu języka.

JavaScript (Ajv)
import Ajv from 'ajv';

const ajv = new Ajv();

const schema = {
  type: 'object',
  properties: {
    name: { type: 'string', minLength: 1 },
    age: { type: 'integer', minimum: 0 },
    email: { type: 'string', format: 'email' }
  },
  required: ['name', 'email'],
  additionalProperties: false
};

const data = { name: 'Alice', age: 30, email: 'alice@example.com' };

const validate = ajv.compile(schema);
const valid = validate(data);
console.log(valid);          // → true
console.log(validate.errors); // → null

// Invalid data — missing required "email"
validate({ name: 'Bob', age: 25 });
console.log(validate.errors);
// → [{ instancePath: '', keyword: 'required', params: { missingProperty: 'email' } }]
Python (jsonschema)
from jsonschema import validate, ValidationError

schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string", "minLength": 1},
        "age": {"type": "integer", "minimum": 0},
        "tags": {
            "type": "array",
            "items": {"type": "string"},
            "uniqueItems": True
        }
    },
    "required": ["name"]
}

# Valid data
validate(instance={"name": "Alice", "age": 30, "tags": ["admin"]}, schema=schema)
# → No exception raised

# Invalid data — wrong type for "age"
try:
    validate(instance={"name": "Alice", "age": "thirty"}, schema=schema)
except ValidationError as e:
    print(e.message)
    # → 'thirty' is not of type 'integer'
    print(e.json_path)
    # → $.age
Go (santhosh-tekuri/jsonschema)
package main

import (
    "fmt"
    "strings"
    "github.com/santhosh-tekuri/jsonschema/v5"
)

func main() {
    schemaJSON := `{
        "type": "object",
        "properties": {
            "id": { "type": "integer" },
            "status": { "enum": ["active", "inactive"] }
        },
        "required": ["id", "status"]
    }`

    compiler := jsonschema.NewCompiler()
    compiler.AddResource("schema.json", strings.NewReader(schemaJSON))
    schema, _ := compiler.Compile("schema.json")

    // Valid data
    data := map[string]interface{}{"id": 1, "status": "active"}
    err := schema.Validate(data)
    fmt.Println(err) // → <nil>

    // Invalid — missing "status"
    bad := map[string]interface{}{"id": 2}
    err = schema.Validate(bad)
    fmt.Println(err) // → validation failed: missing properties: 'status'
}
CLI (check-jsonschema)
# Install via pip
pip install check-jsonschema

# Validate a file against a schema
check-jsonschema --schemafile schema.json data.json
# → ok -- validation done

# Validate against a remote schema (e.g., GitHub Actions workflow)
check-jsonschema --builtin-schema vendor.github-workflows my-workflow.yml

# Validate multiple files at once
check-jsonschema --schemafile schema.json file1.json file2.json file3.json

Często zadawane pytania

Jaka jest różnica między walidacją JSON a walidacją JSON Schema?
Walidacja JSON sprawdza, czy łańcuch znaków jest poprawnym składniowo JSON: prawidłowo zagnieżdżone nawiasy, klucze w cudzysłowie, brak końcowych przecinków. Walidacja JSON Schema idzie o krok dalej i sprawdza, czy sparsowane dane JSON odpowiadają kontraktowi strukturalnemu: poprawne typy, obecność wymaganych pól, wartości w dozwolonych zakresach. Do zastosowania schematu potrzebny jest poprawny JSON, ale poprawny JSON może nadal nie przejść walidacji schematu.
Której wersji JSON Schema powinienem użyć?
Draft 7 to najbezpieczniejszy wybór domyślny. Ma najszersze wsparcie bibliotek we wszystkich językach i obejmuje słowa kluczowe, których potrzebuje większość projektów: type, properties, required, enum, pattern, anyOf, oneOf, allOf i $ref. Użyj Draft 2020-12, jeśli potrzebujesz funkcji takich jak prefixItems do walidacji krotek, $dynamicRef dla rozszerzalnych schematów lub unevaluatedProperties dla ścisłych kształtów obiektów. Przed aktualizacją sprawdź dokumentację swojej biblioteki walidacyjnej pod kątem obsługi wersji.
Jak działa $ref w JSON Schema?
Słowo kluczowe $ref pozwala odwoływać się do innego schematu przez URI zamiast go powielać. Wartość taka jak "$ref": "#/$defs/address" wskazuje na schemat zdefiniowany w sekcji $defs tego samego dokumentu. Możesz też odwoływać się do plików zewnętrznych: "$ref": "https://example.com/schemas/address.json". W Draft 7 $ref zastępuje wszystkie sąsiednie słowa kluczowe w tym samym obiekcie. W Draft 2019-09 i późniejszych sąsiednie słowa kluczowe są stosowane razem z $ref.
Jaka jest różnica między anyOf, oneOf i allOf?
allOf wymaga, aby dane pasowały do każdego pod-schematu w tablicy. anyOf wymaga dopasowania do co najmniej jednego pod-schematu. oneOf wymaga dopasowania do dokładnie jednego pod-schematu i kończy się niepowodzeniem, jeśli dane pasują do zera lub więcej niż jednego. Dla pól dopuszczających null powszechnie stosuje się anyOf z typem i null: {"anyOf": [{"type": "string"}, {"type": "null"}]}. Użyj oneOf, gdy pod-schematy wzajemnie się wykluczają, jak w przypadku oznaczonych unii.
Czy JSON Schema może walidować zagnieżdżone obiekty i tablice?
Tak. Użyj słowa kluczowego properties, aby zdefiniować schematy dla kluczy zagnieżdżonych obiektów, i słowa kluczowego items, aby zdefiniować schemat, który musi spełniać każdy element tablicy. Można je zagnieżdżać na dowolną głębokość. Dla tablic, gdzie każda pozycja ma inny schemat (krotki), użyj prefixItems w Draft 2020-12 lub postaci tablicowej items w Draft 7.
Czy dane wklejone do tego narzędzia są wysyłane na serwer?
Nie. Walidator działa w całości w przeglądarce, używając JavaScript. Twoje dane JSON i schemat nie są nigdy przesyłane na żaden serwer. Możesz to zweryfikować, otwierając inspektor sieci przeglądarki podczas korzystania z narzędzia.
Jak walidować JSON Schema w potoku CI/CD?
Użyj walidatora CLI, takiego jak check-jsonschema (Python/pip) lub ajv-cli (Node.js/npm). Oba przyjmują plik schematu i jeden lub więcej plików danych jako argumenty. Dodaj polecenie walidacji jako krok w konfiguracji CI. Jeśli walidacja się nie powiedzie, proces kończy się kodem innym niż zero, co blokuje potok. W GitHub Actions możesz też użyć bezpośrednio akcji check-jsonschema.