json-validator.de

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 Fragen
Was 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 Fragen
Welche 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 Fragen
Was 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 Fragen
Wann 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 Fragen
Wo 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.