Summary of JSON: Data Interchange and Schema
JSON: Data Interchange and Schema for Students
Úvod
JSON Schema je jazyk pro popis struktury JSON dokumentů a jejich validaci. Umožňuje definovat očekávané typy hodnot, povinné položky, rozsahy čísel, formáty řetězců a vztahy mezi částmi dokumentu. Tento materiál vysvětluje klíčové koncepty JSON Schema (draft 2020-12) s praktickými příklady a poznámkami pro použití ve skutečných projektech.
Definice: JSON Schema je formální specifikace pro popis, validaci a dokumentaci struktury JSON dokumentů.
Základní principy
Deklarace schématu a identifikace
- Každé schéma může začínat deklarací verze:
{ "$schema": "https://json-schema.org/draft/2020-12/schema" } - Volitelně lze nastavit identifikátor: "$id": "http://example.com/schemas/myschema.json". Pokud není uveden, jde o anonymní schéma.
Anotace a komentáře
- Vlastnosti jako title, description a $comment slouží k dokumentaci a nejsou validačními pravidly.
Definice: Anotace jsou popisné pole ve schématu (např. title, description), která pomáhají porozumět datům, ale neovlivňují validaci.
Datové typy a omezení
JSON Schema staví na nativních JSON typech: object, array, string, number, integer, boolean, null.
Čísla a celá čísla
- Typy: integer, number.
- Omezení: multipleOf, minimum, exclusiveMinimum, maximum, exclusiveMaximum.
Příklad: hodnota musí být násobkem 10 a větší nebo rovna 0
{ "type": "number", "multipleOf": 10, "minimum": 0 }
Řetězce
- Omezení: minLength, maxLength, pattern (RegExp podle ECMA-262), format (např. date-time, email, uri, uuid).
Příklad: e-mail a délka
{ "type": "string", "format": "email", "maxLength": 254 }
Boolean a null
- type": "boolean" pro true/false
- type": "null" reprezentuje explicitně hodnotu null (není chybějící hodnota)
Enum
- Definice konkrétních povolených hodnot: enum: ["red","amber","green"]
Práce s objekty
Základní definice objektu
- Typ: type: "object"
- Vnitřní vlastnosti definujeme pomocí properties.
- Ve výchozím stavu jsou vlastnosti, které nejsou uvedeny v properties, povoleny.
Příklad:
{
"type": "object",
"properties": {
"productId": { "type": "integer" },
"productName": { "type": "string" }
},
"required": ["productId"]
}
Definice: required je pole názvů vlastností, které musí být přítomné v objektu, pokud se validace provádí.
additionalProperties a patternProperties
- additionalProperties: true/false nebo objekt schématu. Ve výchozím stavu je true (povolit nepopsané vlastnosti).
- Např.
"additionalProperties": { "type": "string" }povolí další vlastnosti, ale musí být řetězce.
- Např.
- patternProperties: mapuje regulární výrazy na schémata pro názvy vlastností.
- Příklad:
"patternProperties": { "^S_": { "type": "string" } }aplikuje pravidlo na všechny vlastnosti začínající na S_.
- Příklad:
propertyNames a omezení počtu
- propertyNames umožňuje validovat samotná jména vlastností pomocí patternu, např.
"pattern": "^[A-Za-z0-9]*$". - minProperties, maxProperties definují povolený počet vlastností v objektu.
Unevaluated properties
- unevaluatedProperties funguje podobně jako additionalProperties, ale zapadá do situací při skládání schémat (rozšíření uzavřených schémat). Používá se při kombinacích, kde už byly některé vlastnosti vyhodnoceny jinými subschématy.
Tabulka: porovnání vlastností pro neočekávané klíče
| Klíč | Chování | Poznámka |
|---|---|---|
| additionalProperties | Povolit/zakázat nebo definovat schéma | Aplikuje se na nevyjmenované vlastnosti |
| patternProperties | Podmíněné podle názvu (RegExp) | Řízeno jménem vlastnosti |
| unevaluatedProperties | Aplikuje se po vyhodnocení subschémat | Užitečné při composition |
Pole (arrays)
Základní vlastnosti
- type: "array", items definuje, jaká jsou očekávaná data v položkách.
- Pokud items je jedno schéma, pak všechny položky musí odpovídat tomuto schématu.
- Délka pole: *
Already have an account? Sign in
JSON Schema Přehled
Klíčové pojmy: Deklarujte verzi přes "$schema" a identifikátor přes "$id", Používejte properties a required pro definici povinných polí objektu, additionalProperties defaultně povoluje neznámé vlastnosti; nastavte false pro uzavřený objekt, patternProperties a propertyNames umožňují validovat jména vlastností regulárními výrazy, prefixItems pro tuple validation; items nebo items: false pro další položky, contains s minContains/maxContains kontroluje počet položek splňujících podmínku, Používejte allOf/anyOf/oneOf/not pro kompozici složitých pravidel, Odkazy přes $ref a $defs umožňují opakované použití a rozdělení schémat, JSON Pointer (RFC 6901) adresuje části schématu, např. #/properties/street_address, Používejte formáty (email, date-time, uri) a pattern pro řetězce, Nastavte minItems/maxItems a uniqueItems pro pole podle potřeby, Používejte unevaluatedProperties opatrně při skládání subschemat