JSON Schema ist eine Möglichkeit, mithilfe eines weiteren JSON-Dokuments zu beschreiben, wie die Struktur eines JSON-Dokuments aussehen soll. Statt Daten von Hand mit Bedingungen im Code zu validieren, kann man deklarativ die erwarteten Typen, Pflichtfelder und Wertbeschränkungen beschreiben und Daten dann automatisch dagegen prüfen.
Zentrale draft-07-Schlüsselwörter
type— der erwartete Werttyp (object, string, number, array usw.).required— die Liste der Objektfelder, die zwingend vorhanden sein müssen.properties— die Schemabeschreibung für jedes Feld eines Objekts einzeln.enum— beschränkt einen Wert auf eine bestimmte Menge zulässiger Optionen.pattern— prüft einen String gegen einen regulären Ausdruck, etwa für das Format der Steuer-ID.
Beispiel: pattern für die deutsche Steuer-ID
Die steuerliche Identifikationsnummer (Steuer-ID) besteht in Deutschland aus genau 11 Ziffern, wobei die erste Ziffer nicht 0 sein darf. Ein Schema für ein Formularfeld in einer Payroll- oder Steuer-API könnte das so beschreiben: "steuerId": {"type": "string", "pattern": "^[1-9]\\d{10}$"}. Das prüft nicht die interne Prüfziffernlogik der Steuer-ID — dafür braucht es einen eigenen Algorithmus —, fängt aber sofort die häufigsten Fehler ab: eine falsche Ziffernanzahl, Leerzeichen aus einem eingescannten Dokument oder eine führende Null, die beim Kopieren aus einer Excel-Zelle verlorengegangen ist.
Der Unterschied zur Syntaxvalidierung
Normale JSON-Validierung prüft nur, ob der Text syntaktisch korrekt ist — richtige Klammern, Anführungszeichen, Kommas. JSON Schema prüft deutlich mehr: Hat ein Objekt ein Pflichtfeld email, ist der Wert von age eine Zahl und kein String, gehört status zur erlaubten Liste von Werten.
Wozu man das braucht
- Prüfen, ob die Antwort einer Drittanbieter-API dem dokumentierten Vertrag entspricht.
- Konfigurationsdateien vor dem Deployment validieren, um einen Fehler frühzeitig abzufangen.
- Die erwartete Datenstruktur in einem Format dokumentieren, das sofort automatisch geprüft werden kann.
additionalProperties: dürfen zusätzliche Felder vorkommen?
Standardmäßig erlaubt JSON Schema in einem Objekt beliebige Felder über die in properties beschriebenen hinaus — required und properties legen nur ein Minimum fest, keine abschließende Liste. Um unbekannte Felder zu verbieten, muss man explizit "additionalProperties": false setzen — ohne dieses Flag bleibt das Schema „offen".