Utilia

Validador de JSON Schema

Valida un document JSON amb un JSON Schema al navegador. Cada error es llista amb el seu camí de la instància, la paraula clau i el camí de l'esquema.

Com validar JSON amb un esquema

  1. Enganxa l’esquema a JSON Schema i les dades a Document JSON, o tria un cas preparat d’Exemple.
  2. Deixa Versió (draft) a Automàtica ($schema) per fer servir la versió que indica el $schema de l’esquema, o força el draft 4, 7, 2019-09 o 2020-12.
  3. La validació s’executa mentre escrius; Valida la torna a executar. Formata els dos torna a sagnar els dos textos.
  4. Llegeix el resultat: una línia verda quan el document és vàlid i, si no, una taula d’errors.

Com es llegeix la taula d’errors

Cada fila és una regla que ha fallat:

  • Camí de la instància és un JSON Pointer cap al valor que ha fallat. /roles/1 és el segon element de roles; (arrel) és tot el document.
  • Paraula clau és la regla de l’esquema que ha fallat: type, required, minimum, pattern, format, additionalProperties, etc.
  • Missatge explica el motiu del fallament, per exemple 0 is less than 1.
  • Camí de l’esquema apunta a la paraula clau dins de l’esquema, com /properties/id/minimum, de manera que pots trobar la regla ràpidament.

La validació no s’atura al primer problema: es llisten tots els errors. Quan falla una propietat d’un objecte, el validador informa d’un resum («Property “id” does not match schema») seguit del motiu precís. Mostra només els errors més específics amaga aquests resums; desmarca l’opció per veure tota la cadena. Els errors sota anyOf i oneOf sempre es mantenen junts amb els errors específics de cada branca, perquè només tenen sentit conjuntament.

Els missatges d’error que genera el validador estan en anglès; la resta de la interfície d’aquesta eina està en català.

Què s’admet

  • Versions (drafts): 4, 6 (validat amb les regles del draft 7), 7, 2019-09 i 2020-12, incloent-hi $defs/definitions, $ref locals, if/then/else, dependentRequired, dependentSchemas, prefixItems, unevaluatedProperties i unevaluatedItems.
  • Formats: es comproven date, time, date-time, duration, email, hostname, ipv4, ipv6, uri, uri-reference, uri-template, uuid, regex, json-pointer i relative-json-pointer. Els formats desconeguts s’ignoren, tal com permet l’especificació.
  • Referències: $ref pot apuntar a qualsevol lloc de l’esquema, incloent-hi un $id que ell mateix declari. Els esquemes remots no es baixen mai; una referència a una altra URL s’informa com a no resolta.

Aquesta eina valida documents segons el teu esquema. No comprova que l’esquema mateix segueixi el metaesquema, però t’avisa dels noms de type desconeguts com "strin" o "int", una errada tipogràfica habitual que els validadors, altrament, ignoren en silenci.

Els exemples

  • Perfil d’usuari (2020-12): required, longituds de cadena, format: email, un enum dins d’items, uniqueItems i additionalProperties: false.
  • Llista de productes amb $ref (draft-07): una matriu els elements de la qual fan referència a #/definitions/product, amb un pattern per al SKU i un preu amb exclusiveMinimum.
  • Configuració amb if/then (2019-09): un certificat requerit només en mode HTTPS, un oneOf entre correu electrònic i URI, i límits numèrics.

Cada exemple inclou un document amb errors deliberats, perquè vegis quin aspecte tenen els errors.

Preguntes freqüents

Es pugen les meves dades?

No. L’esquema i el document es validen al teu navegador; no s’envia res a cap servidor.

Per què el $ref del meu esquema és «no resolt»?

El validador només coneix l’esquema que has enganxat. Un $ref a un altre fitxer o URL no es pot seguir; copia les definicions referenciades a $defs i apunta a #/$defs/….

Quina versió (draft) he de fer servir?

Fes servir la que usi el teu projecte i declara-la amb $schema. Per als esquemes nous, la 2020-12 és la versió actual; OpenAPI 3.1 també la fa servir.

Per què integer rebutja 2.0?

No el rebutja: JSON Schema tracta 2.0 com un enter perquè el seu valor és sencer. 2.5 no compleix "type": "integer".

Funciona sense connexió?

Sí. Un cop la pàgina s’ha carregat i has executat una primera validació (que carrega el validador), no cal cap connexió.