ToolDeck

JSON Schema Validator

Validujte JSON data oproti JSON Schema (Draft 7)

Zkusit příklad

JSON Data

JSON Schema

Běží lokálně · Bezpečné pro vkládání tajných údajů
Běží lokálně · Bezpečné pro vkládání tajných údajů

Co je validace JSON Schema?

Validace JSON Schema je proces ověřování, zda JSON dokument odpovídá sadě strukturálních a hodnotových omezení definovaných v JSON Schema. Samotné schéma je JSON dokument, který popisuje očekávaný tvar vašich dat: které vlastnosti jsou povinné, jaké typy musí mít, povolené rozsahy čísel, vzory řetězců, délky polí a další. Specifikace JSON Schema je spravována na json-schema.org a publikována jako série návrhů IETF — nejrozšířenějšími jsou Draft 7 a Draft 2020-12.

Zatímco prostá validace JSON kontroluje pouze syntaxi (jsou závorky správně spárovány? jsou řetězce v uvozovkách?), validace Schema jde dále. Odpovídá na otázky jako: obsahuje odpověď tohoto API pole "id", které je vždy celé číslo? Je pole "status" jednou ze tří povolených hodnot? Jsou vnořené objekty správně tvarované? Tento typ strukturálního ověření zachytí chyby, které syntaktická kontrola zcela přehlédne — syntakticky platný JSON může být stále sémanticky nesprávný pro vaši aplikaci.

JSON Schema se používá v definicích OpenAPI/Swagger, validaci konfiguračních souborů, validaci formulářů, omezeních databázových dokumentů a automatizovaném testování. Nástroje jako Ajv (JavaScript), jsonschema (Python) a check-jsonschema (CLI) implementují specifikaci a umožňují programatickou validaci dat. Tento online validátor vám umožní vložit schéma i datový dokument a okamžitě ověřit shodu, bez instalace jakékoliv knihovny.

Proč používat online validátor JSON Schema?

Psaní schémat a ruční ladění chyb validace je pomalé. Online validátor JSON Schema vám poskytne okamžitou zpětnou vazbu, zda vaše data odpovídají schématu, s jasnými chybovými zprávami ukazujícími přesně na vlastnost, která selhala.

Okamžitá zpětná vazba validace
Vložte schéma a data a okamžitě uvidíte výsledky validace. Každá chyba zobrazuje cestu JSON a konkrétní omezení, které selhalo — takže problémy opravíte bez procházení výstupu validační knihovny.
🔒
Zpracování pouze v prohlížeči
Vaše JSON data nikdy neopustí prohlížeč. Veškerá validace probíhá lokálně v JavaScriptu. Žádný server, žádné logy, žádné uchovávání dat. Bezpečné pro schémata popisující interní API nebo obsahující proprietární názvy polí.
🎯
Validace dle verze Draft
Validátor zpracovává klíčová slova Draft 7, včetně type, required, properties, enum, pattern, minimum/maximum, items, anyOf, oneOf, allOf a additionalProperties. Otestujte schéma zde před jeho zapojením do sestavovacího pipeline nebo testovací sady.
📋
Bez účtu ani instalace
Otevřete stránku, vložte JSON a validujte. Žádný npm install, žádný pip balíček, žádný Docker obraz. Užitečné, když potřebujete rychlou kontrolu schématu na počítači, kde nelze instalovat vývojářské nástroje.

Případy použití validace JSON Schema

Testování API kontraktů
Validujte odpovědi API oproti schématu definovanému ve vaší OpenAPI specifikaci. Zachyťte narušení zpětné kompatibility — například změnu pole z celého čísla na řetězec — dříve, než se dostanou do produkce.
Ověření konfiguračních souborů
Zkontrolujte, zda JSON konfigurační soubory pro CI/CD pipeline, manifesty Kubernetes nebo nastavení aplikací odpovídají očekávanému schématu před commitováním. Předejdete selhání nasazení způsobeným chybějícími nebo chybně zapsanými klíči.
Brány DevOps pipeline
Přidejte validaci Schema jako krok CI pro zamítnutí payloadů porušujících kontrakt. Funguje pro soubory proměnných Terraform, vstupy GitHub Actions nebo jakýkoliv strukturovaný JSON zpracovávaný automatizací.
QA a revize testovacích dat
Ověřte, že testovací fixtures a soubory s mock daty odpovídají stejnému schématu, jaké očekává vaše aplikace. Nesourodá testovací data jsou běžným zdrojem falešně pozitivních výsledků testů.
Příjem dat v datovém pipeline
Validujte příchozí JSON záznamy na vstupu datového pipeline. Validace Schema odfiltruje poškozené události dříve, než dosáhnou datového skladu, a sníží náklady na čištění dat.
Výuka syntaxe JSON Schema
Experimentujte s klíčovými slovy Schema interaktivně. Napište schéma, vložte testovací data a sledujte, která omezení projdou nebo selžou. Rychlejší než psát skript a spouštět jej z terminálu.

Přehled klíčových slov JSON Schema

JSON Schema se skládá z klíčových slov, z nichž každé ukládá omezení na validovaná data. Tabulka níže uvádí nejpoužívanější klíčová slova v Draft 7 a novějších. Každé klíčové slovo lze kombinovat s ostatními ve stejném objektu schématu.

Klíčové slovoÚčelPříklad
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" } } }

Srovnání verzí JSON Schema: Draft 7 vs 2019-09 vs 2020-12

JSON Schema prošla několika verzemi návrhů. Draft 7 (publikovaný v roce 2018) má nejširší podporu v nástrojích. Draft 2019-09 zavedl $defs (nahrazující definitions), unevaluatedProperties a $recursiveRef. Draft 2020-12 (nejnovější stabilní vydání) nahradil $recursiveRef za $dynamicRef a zavedl prefixItems pro validaci n-tic. Při výběru verze ověřte, zda ji vaše validační knihovna podporuje. Ajv podporuje všechny tři verze. Knihovna jsonschema pro Python podporuje Draft 2020-12 od verze 4.0.

FunkceDraft 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

Příklady kódu

Tyto příklady ukazují, jak programaticky validovat JSON oproti schématu. Každý využívá dobře udržovanou knihovnu pro dané jazykové prostředí.

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

Nejčastěji kladené otázky

Jaký je rozdíl mezi validací JSON a validací JSON Schema?
Validace JSON kontroluje, zda je řetězec platnou JSON syntaxí: správně vnořené závorky, klíče v uvozovkách, žádné závěrečné čárky. Validace JSON Schema jde o krok dále a ověřuje, zda zpracovaná JSON data odpovídají strukturálnímu kontraktu: správné typy, přítomnost povinných polí, hodnoty v povolených rozsazích. Potřebujete platný JSON, než můžete aplikovat schéma — ale platný JSON může validací Schema stále selhat.
Kterou verzi JSON Schema bych měl použít?
Draft 7 je nejbezpečnější výchozí volba. Má nejširší podporu knihoven napříč jazyky a pokrývá klíčová slova, která většina projektů potřebuje: type, properties, required, enum, pattern, anyOf, oneOf, allOf a $ref. Použijte Draft 2020-12, pokud potřebujete funkce jako prefixItems pro validaci n-tic, $dynamicRef pro rozšiřitelná schémata nebo unevaluatedProperties pro striktní tvary objektů. Před upgradem ověřte v dokumentaci vaší validační knihovny, zda danou verzi podporuje.
Jak funguje $ref v JSON Schema?
Klíčové slovo $ref umožňuje odkazovat na jiné schéma pomocí URI namísto jeho duplikování. Hodnota jako "$ref": "#/$defs/address" odkazuje na schéma definované v sekci $defs stejného dokumentu. Lze také odkazovat na externí soubory pomocí "$ref": "https://example.com/schemas/address.json". V Draft 7 $ref nahrazuje všechna sousední klíčová slova ve stejném objektu. V Draft 2019-09 a novějších jsou sousední klíčová slova aplikována společně s $ref.
Jaký je rozdíl mezi anyOf, oneOf a allOf?
allOf vyžaduje, aby data odpovídala každému dílčímu schématu v poli. anyOf vyžaduje shodu alespoň s jedním dílčím schématem. oneOf vyžaduje shodu právě s jedním dílčím schématem a selže, pokud data neodpovídají žádnému nebo odpovídají více než jednomu. Pro pole s hodnotou null je běžné použití anyOf s typem a null: {"anyOf": [{"type": "string"}, {"type": "null"}]}. Použijte oneOf, pokud jsou dílčí schémata vzájemně výlučná, například u tagovaných sjednocení.
Může JSON Schema validovat vnořené objekty a pole?
Ano. Klíčové slovo properties definuje schémata pro klíče vnořených objektů, klíčové slovo items definuje schéma, kterému musí odpovídat každý prvek pole. Lze je libovolně hlouboce vnořovat. Pro pole, kde má každá pozice jiné schéma (n-tice), použijte prefixItems v Draft 2020-12 nebo polovou formu items v Draft 7.
Jsou data vložená do tohoto nástroje odesílána na server?
Ne. Validátor běží výhradně ve vašem prohlížeči pomocí JavaScriptu. Vaše JSON data ani schéma nejsou nikdy přenášena na žádný server. Ověřit to lze otevřením síťového inspektoru prohlížeče při používání nástroje.
Jak validovat JSON Schema v CI/CD pipeline?
Použijte CLI validátor check-jsonschema (Python/pip) nebo ajv-cli (Node.js/npm). Oba přijímají soubor schématu a jeden nebo více datových souborů jako argumenty. Přidejte příkaz validace jako krok do konfigurace CI. Pokud validace selže, proces skončí s nenulovým kódem, který zablokuje pipeline. Pro GitHub Actions lze také přímo použít akci check-jsonschema.