Ratgeber · JSON Schema 2020-12
JSON-Validation: vom Syntax-Check zum Schema-Vertrag
Zwei Stufen: Syntax-Validation prüft ob JSON.parse durchläuft. Schema-Validation prüft Struktur, Typen, Pflichtfelder. Wann welche Stufe wichtig ist.
Von Mateusz Viola
Betreiber & redaktionelle Verantwortung json-validator.de
Veröffentlicht
Aktualisiert:
JSON-Validation in zwei Stufen
JSON-Validation ist kein einzelner Vorgang, sondern zwei getrennte Stufen, die oft zusammen genutzt werden:
| Stufe | Was wird geprüft | Tool |
|---|---|---|
| Syntax-Validation | Ist der Text überhaupt gültiges JSON? Stimmen Klammern, Anführungszeichen, Escape-Sequenzen? | JSON.parse (nativ) |
| Schema-Validation | Hat das geparste Objekt die richtige Struktur, Typen, Pflichtfelder, Wertebereiche? | Ajv, Zod, Yup, etc. |
Reihenfolge ist relevant: Schema-Validation setzt voraus, dass Syntax-Validation durch ist - sonst gibt es kein Objekt zum Validieren.
Wann nur Syntax-Check reicht
Für reines "ist das überhaupt gültiges JSON"-Prüfen ist JSON.parse ausreichend. Typische Anwendungsfälle:
- JSON-Datei aus Editor laden und Pretty-Print anzeigen
- Quick-Check ob ein API-Response-Payload überhaupt verarbeitbar ist
- Manuelle Schema-freie Konfigurations-Dateien
JSON.parse wirft bei kaputter Syntax einen SyntaxError mit Position. Aus dieser Position lassen sich Zeile und Spalte berechnen - genau das macht das Tool oben.
Wann Schema-Validation Pflicht ist
Sobald Daten zwischen Systemen ausgetauscht werden, reicht Syntax-Check nicht mehr. Klassische Szenarien:
- REST-API-Endpoints: Request-Bodies müssen die erwartete Struktur haben - sonst stürzt der Handler bei
user.email.toLowerCase()ab weil email nicht da ist. - Konfigurations-Dateien mit Schema: Build-Tools, CI-Configs, IDE-Settings. Schema verhindert Tippfehler in Keynames.
- Datenmigration: Beim Import von Daten aus externer Quelle muss sichergestellt sein, dass die Spalten und Typen passen.
- Message-Queues / Event-Driven-Architekturen: Producer und Consumer müssen sich auf einen Vertrag einigen - Schema ist dieser Vertrag.
Welche Stufe wofür
Faustregel: Wenn Daten nur in deinem Code bleiben, reicht JSON.parse. Sobald Daten von außen kommen oder nach außen gehen, brauchst du Schema-Validation.
Innerhalb einer Anwendung sind die geparsten Objekte ohnehin durch das Type-System (TypeScript) abgesichert - Validation passiert nur an den Rändern ("Validation at the boundaries").
Tools im Überblick
| Tool | Sprache | Schema-Format | Stärke |
|---|---|---|---|
| Ajv | JS/TS | JSON Schema | Schnellste JS-Library, Standard-Compliance |
| Zod | TS | Code (Schema-Builder) | Type-Inference, Frontend-zentriert |
| python-jsonschema | Python | JSON Schema | De-facto-Standard für Python |
| Justify / Snow | Java | JSON Schema | JVM-Validator |
| opis/json-schema | PHP | JSON Schema | Pure PHP, Composer |
Cross-Language-Validation funktioniert nur mit JSON Schema (oder einer ähnlichen Spec). Builder-APIs wie Zod sind exklusiv für ihre Sprache.
Performance-Aspekt
Ajv kompiliert Schemas in spezialisierten JavaScript-Code - beim ersten Aufruf langsamer (Compile), bei wiederholten Aufrufen sehr schnell (mikrosekunden pro Validation). Wichtig: das gleiche Schema nicht jedes Mal neu kompilieren - das Validator-Objekt zur App-Start-Zeit erstellen und global halten.