Utilia

JSON Schema-validator

Valideer een JSON-document tegen een JSON Schema in je browser. Elke fout wordt getoond met instancepad, keyword en schemapad.

Zo valideer je JSON tegen een schema

  1. Plak je schema in JSON Schema en je gegevens in JSON-document, of kies een kant-en-klaar geval onder Voorbeeld.
  2. Laat Draft op Automatisch ($schema) staan om de versie te gebruiken die in de $schema van het schema staat, of forceer draft 4, 7, 2019-09 of 2020-12.
  3. De validatie loopt terwijl je typt; Valideren voert hem opnieuw uit. Beide formatteren laat de twee teksten opnieuw inspringen.
  4. Lees het resultaat: een groene regel als het document geldig is, anders een tabel met fouten.

De fouttabel lezen

Elke rij is één regel die niet klopt:

  • Instancepad is een JSON Pointer naar de waarde die niet klopt. /roles/1 is het tweede item van roles; (root) is het hele document.
  • Keyword is de schemaregel die faalt: type, required, minimum, pattern, format, additionalProperties enzovoort.
  • Melding legt uit wat er misgaat, bijvoorbeeld 0 is less than 1. De meldingen van de validator zijn in het Engels.
  • Schemapad wijst naar het keyword in het schema, zoals /properties/id/minimum, zodat je de regel snel terugvindt.

De validatie stopt niet bij het eerste probleem: alle fouten worden getoond. Faalt een eigenschap van een object, dan meldt de validator een samenvatting (“Property “id” does not match schema”) gevolgd door de precieze reden. Alleen de meest specifieke fouten tonen verbergt die samenvattingen; vink het uit om de hele keten te zien. Fouten onder anyOf en oneOf blijven altijd samen met de specifieke fouten van elke tak staan, omdat ze alleen samen betekenis hebben.

Wat wordt ondersteund

  • Drafts: 4, 6 (gevalideerd met de regels van draft 7), 7, 2019-09 en 2020-12, inclusief $defs/definitions, lokale $ref, if/then/else, dependentRequired, dependentSchemas, prefixItems, unevaluatedProperties en unevaluatedItems.
  • Formats: date, time, date-time, duration, email, hostname, ipv4, ipv6, uri, uri-reference, uri-template, uuid, regex, json-pointer en relative-json-pointer worden gecontroleerd. Onbekende formats worden genegeerd, zoals de specificatie toestaat.
  • Verwijzingen: $ref kan overal binnen het schema naartoe wijzen, ook naar een $id die het schema zelf declareert. Externe schema’s worden nooit gedownload; een verwijzing naar een andere URL wordt als onopgelost gemeld.

Deze tool valideert documenten tegen je schema. Hij controleert niet of het schema zelf aan het metaschema voldoet, maar waarschuwt wel voor onbekende type-namen zoals "strin" of "int", een veelgemaakte typefout die validators anders stilzwijgend negeren.

De voorbeelden

  • Gebruikersprofiel (2020-12): required, stringlengtes, format: email, een enum binnen items, uniqueItems en additionalProperties: false.
  • Productlijst met $ref (draft-07): een array waarvan de items verwijzen naar #/definitions/product, met een pattern voor de SKU en een prijs met exclusiveMinimum.
  • Configuratie met if/then (2019-09): een certificaat dat alleen in HTTPS-modus verplicht is, een oneOf tussen e-mail en URI, en numerieke grenzen.

Bij elk voorbeeld hoort een document met opzettelijke fouten, zodat je ziet hoe de foutmeldingen eruitzien.

Veelgestelde vragen

Worden mijn gegevens geüpload?

Nee. Het schema en het document worden in je browser gevalideerd; er wordt niets naar een server gestuurd.

Waarom is de $ref van mijn schema “onopgelost”?

De validator kent alleen het schema dat je hebt geplakt. Een $ref naar een ander bestand of een andere URL kan niet worden gevolgd. Kopieer de gebruikte definities naar $defs en verwijs in plaats daarvan naar #/$defs/….

Welke draft moet ik gebruiken?

Gebruik de versie waar je project op gericht is, en declareer die met $schema. Voor nieuwe schema’s is 2020-12 de huidige versie; OpenAPI 3.1 gebruikt die ook.

Waarom weigert integer de waarde 2.0?

Dat doet het niet: JSON Schema behandelt 2.0 als integer, omdat de waarde geheel is. 2.5 faalt wel op "type": "integer".

Werkt het offline?

Ja. Zodra de pagina is geladen en je een eerste validatie hebt uitgevoerd (die de validator laadt), is er geen verbinding meer nodig.