json-validator.de

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.

Foto von Mateusz Viola

Von Mateusz Viola

Betreiber & redaktionelle Verantwortung json-validator.de

JSON-Validation in zwei Stufen

JSON-Validation ist kein einzelner Vorgang, sondern zwei getrennte Stufen, die oft zusammen genutzt werden:

StufeWas wird geprüftTool
Syntax-ValidationIst der Text überhaupt gültiges JSON? Stimmen Klammern, Anführungszeichen, Escape-Sequenzen?JSON.parse (nativ)
Schema-ValidationHat 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

ToolSpracheSchema-FormatStärke
AjvJS/TSJSON SchemaSchnellste JS-Library, Standard-Compliance
ZodTSCode (Schema-Builder)Type-Inference, Frontend-zentriert
python-jsonschemaPythonJSON SchemaDe-facto-Standard für Python
Justify / SnowJavaJSON SchemaJVM-Validator
opis/json-schemaPHPJSON SchemaPure 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.

Mehr zum Thema