Antworten · JSON Schema 2020-12
Häufige Fragen zu JSON-Validation
17 Antworten auf die meistgesuchten Fragen rund um JSON Schema, Ajv und Validation-Patterns.
Grundlagen
4 FragenWas ist ein JSON Validator?
Ein JSON Validator prüft auf zwei Ebenen: erstens ob der Text überhaupt gültiges JSON ist (also durch JSON.parse läuft), zweitens optional ob das geparste Objekt einem JSON-Schema entspricht (Pflichtfelder, Typen, Wertebereiche). json-validator.de unterstützt beide Stufen.
Was ist der Unterschied zwischen Syntax-Validation und Schema-Validation?
Syntax-Validation prüft nur ob die Klammern und Anführungszeichen stimmen - das macht JSON.parse. Schema-Validation prüft danach die Semantik: ist user_id eine Zahl? Ist email eine gültige E-Mail-Adresse? Fehlt vielleicht ein Pflichtfeld? Beide Stufen sind unabhängig voneinander.
Was ist JSON Schema?
JSON Schema ist ein Beschreibungs-Format für JSON-Dokumente. Es ist selbst JSON und beschreibt, wie ein gültiges Dokument auszusehen hat: welche Felder Pflicht sind, welche Typen, welche Wertebereiche. Aktuelle Version: Draft 2020-12. JSON Schema ist die Sprache hinter OpenAPI 3.1 für Request- und Response-Bodies.
Werden meine JSON-Daten an einen Server geschickt?
Nein. Die Validierung läuft komplett in deinem Browser. JSON.parse für die Syntax läuft nativ in der JavaScript-Engine. Die Schema-Validierung läuft mit Ajv ebenfalls clientseitig. Die Eingabe verlässt nie dein Gerät - die Site selbst hat nur Umami-Analytics für anonyme Besuchszahlen.
Tool
4 FragenWelche JSON-Schema-Draft-Versionen unterstützt das Tool?
Der eingebaute Schema-Validator nutzt Draft 2020-12 als Default und erkennt das $schema-Keyword automatisch. Drafts 07, 2019-09 und 2020-12 sind unterstützt. Für Draft 04/06 (sehr alte Schemas) empfehlen wir eine Migration auf eine aktuelle Version.
Wie groß darf die JSON-Datei sein?
Bis 10 MB. Größere Dateien können den Browser-Tab kurzzeitig blockieren weil JSON.parse synchron läuft. Für sehr große Dateien (über 50 MB) sind Streaming-Parser wie clarinet oder JSONStream sinnvoller - die laufen aber nicht im Browser sondern in Node.js.
Welche Fehlermeldungen kann das Tool anzeigen?
Bei Syntax-Fehlern: Zeile, Spalte und Position des Fehlers, plus eine deutsche Erklärung (z.B. "Unerwartetes Zeichen: }" oder "Unvollständiger JSON-Code"). Bei Schema-Fehlern: pfadgenaue Auflistung welches Feld welche Constraint verletzt hat - z.B. "/user/email muss ein gültiger format=email sein".
Kann ich aus dem Tool das validierte JSON kopieren?
Ja, mit dem Kopieren-Button oder per Download als .json-Datei. Das Tool formatiert das JSON dabei mit deiner gewählten Einrückung (2, 4 oder 8 Spaces) - also auch nützlich wenn du Minified-JSON pretty-printen willst.
Schema
4 FragenWas ist der häufigste Fehler bei JSON-Schema-Validation?
Verwechslung von properties und required: properties beschreibt mögliche Felder, required listet welche davon Pflicht sind. required ist ein Array von Strings - KEIN Objekt. Beispiel: "required": ["name", "email"]. Nicht: "required": { "name": true }.
Soll ich additionalProperties: false setzen?
In API-Schemas: ja, immer. Tippfehler im Client (emial statt email) führen sonst zu stillen Bugs - das Feld wird einfach ignoriert. Mit additionalProperties: false bekommst du sofort einen klaren Fehler. Bei "offenen" Konfig-Schemas (z.B. mit User-Extensions) kann true sinnvoll sein.
Was nutzt man wenn ein Feld nullable sein soll?
In Draft 2020-12: type: ["string", "null"]. Der alte OpenAPI-3.0-Stil mit "nullable": true funktioniert in Draft 2020-12 nicht - OpenAPI 3.1 hat das auf type: [..., "null"] umgestellt. Wenn dein Tooling beides verlangt, einfach beides setzen.
Wie validiere ich Tagged Unions / Discriminated Unions?
Mit oneOf + const auf einem Discriminator-Feld. Beispiel: { oneOf: [ { properties: { type: { const: "user" }, email: { type: "string" } } }, { properties: { type: { const: "guest" }, sessionId: { type: "string" } } } ] }. Ajv erkennt das automatisch und optimiert die Validation.
Validation
2 FragenWann ist Ajv schneller als Zod?
Bei Server-Side-Validation mit kompilierten Schemas: Ajv ist typisch 5-30× schneller, weil es das Schema in spezialisierten JS-Code übersetzt. Bei Client-Side-Validation in einer React-App spielt der Unterschied keine Rolle - Zod ist dann meist die bessere Wahl wegen TypeScript-Type-Inference.
Validiert JSON.parse() überhaupt etwas?
JSON.parse() prüft nur die Syntax - also ob die Klammern und Anführungszeichen stimmen, ob Strings korrekt escaped sind, ob Numbers gültig sind. Es prüft nicht die Struktur ("ist user_id vorhanden?") oder Semantik ("ist email eine echte E-Mail?"). Dafür brauchst du JSON Schema.
Integration
3 FragenWo baue ich JSON-Validation in meine API ein?
Als Middleware vor dem Endpoint-Handler. Pattern: Express + ajv (handle-Function nach express.json()), Fastify (eingebaute Schema-Validation via @fastify/swagger), Hono (zod-validator-Middleware). Wichtig: erst Body parsen, dann Schema validieren, erst dann den Handler aufrufen.
OpenAPI oder reines JSON Schema verwenden?
Wenn du eine HTTP-API bereitstellst: OpenAPI 3.1. Es nutzt JSON Schema Draft 2020-12 für die Body-Schemas und fügt API-spezifische Metadaten dazu (Pfade, Status-Codes, Security). Reines JSON Schema reicht für Konfigurations-Validierung oder interne Datenstrukturen ohne HTTP-Kontext.
Kann ich TypeScript-Typen aus einem JSON-Schema generieren?
Ja, mit Tools wie json-schema-to-typescript (CLI) oder Quicktype (Web/CLI). Im Build-Step ausführen, Output in einen .d.ts-File. Damit bleibt Schema die Source-of-Truth, Typen sind generiert. Achtung: nicht jedes JSON-Schema-Feature mappt 1:1 auf TypeScript - z.B. format-Validation hat kein TS-Äquivalent.