Utilia

Validatore JSON Schema

Valida un documento JSON rispetto a un JSON Schema nel browser. Ogni errore è elencato con percorso nell'istanza, parola chiave e percorso nello schema.

Come validare un JSON rispetto a uno schema

  1. Incolla il tuo schema in JSON Schema e i tuoi dati in Documento JSON, oppure scegli un caso già pronto da Esempio.
  2. Lascia Draft su Automatico ($schema) per usare la versione indicata dal $schema dello schema, oppure forza il draft 4, 7, 2019-09 o 2020-12.
  3. La validazione parte mentre scrivi; Valida la rilancia. Formatta entrambi reindenta i due testi.
  4. Leggi il risultato: una riga verde quando il documento è valido, altrimenti una tabella di errori.

Leggere la tabella degli errori

Ogni riga è una regola non rispettata:

  • Percorso nell’istanza è un JSON Pointer verso il valore che ha fallito. /roles/1 è il secondo elemento di roles; (radice) è l’intero documento.
  • Parola chiave è la regola dello schema che ha fallito: type, required, minimum, pattern, format, additionalProperties e così via.
  • Messaggio spiega il problema, per esempio 0 is less than 1. I messaggi del validatore sono in inglese, ma percorsi e parole chiave bastano di solito a capire subito cosa correggere.
  • Percorso nello schema punta alla parola chiave dentro lo schema, come /properties/id/minimum, così trovi in fretta la regola.

La validazione non si ferma al primo problema: vengono elencati tutti gli errori. Quando una proprietà di un oggetto fallisce, il validatore segnala un riepilogo (“Property “id” does not match schema”) seguito dal motivo preciso. Mostra solo gli errori più specifici nasconde questi riepiloghi; togli la spunta per vedere la catena completa. Gli errori sotto anyOf e oneOf restano sempre insieme agli errori specifici di ogni ramo, perché hanno senso solo insieme.

Cosa è supportato

  • Draft: 4, 6 (validato con le regole del draft 7), 7, 2019-09 e 2020-12, compresi $defs/definitions, $ref locali, if/then/else, dependentRequired, dependentSchemas, prefixItems, unevaluatedProperties e unevaluatedItems.
  • Formati: vengono controllati date, time, date-time, duration, email, hostname, ipv4, ipv6, uri, uri-reference, uri-template, uuid, regex, json-pointer e relative-json-pointer. I formati sconosciuti vengono ignorati, come permette la specifica.
  • Riferimenti: $ref può puntare ovunque dentro lo schema, anche a un $id che vi è dichiarato. Gli schemi remoti non vengono mai scaricati; un riferimento a un altro URL viene segnalato come non risolto.

Questo strumento valida i documenti rispetto al tuo schema. Non controlla che lo schema stesso rispetti il meta-schema, ma ti avvisa dei nomi di type sconosciuti come "strin" o "int", un refuso frequente che i validatori altrimenti ignorano in silenzio.

Gli esempi

  • Profilo utente (2020-12): required, lunghezze delle stringhe, format: email, un enum dentro items, uniqueItems e additionalProperties: false.
  • Elenco prodotti con $ref (draft-07): un array i cui elementi fanno riferimento a #/definitions/product, con un pattern per lo SKU e un prezzo con exclusiveMinimum.
  • Configurazione con if/then (2019-09): un certificato richiesto solo in modalità HTTPS, un oneOf tra email e URI e dei limiti numerici.

Ogni esempio è accompagnato da un documento con errori voluti, così vedi come appaiono gli errori.

Domande frequenti

I miei dati vengono caricati?

No. Lo schema e il documento vengono validati nel tuo browser; nulla viene inviato a un server.

Perché il $ref del mio schema è "non risolto"?

Il validatore conosce solo lo schema che hai incollato. Un $ref verso un altro file o URL non può essere seguito; copia le definizioni a cui fa riferimento in $defs e punta invece a #/$defs/….

Quale draft dovrei usare?

Quello previsto dal tuo progetto, dichiarato con $schema. Per i nuovi schemi, 2020-12 è la versione attuale; la usa anche OpenAPI 3.1.

Perché integer rifiuta 2.0?

Non lo rifiuta: JSON Schema considera 2.0 un intero perché il suo valore è intero. È 2.5 a non rispettare "type": "integer".

Perché i messaggi di errore sono in inglese?

Vengono direttamente dalla libreria di validazione, che li produce in inglese. Le colonne Percorso nell’istanza, Parola chiave e Percorso nello schema indicano comunque con precisione dove si trova il problema.

Funziona offline?

Sì. Una volta caricata la pagina ed eseguita una prima validazione (che carica il validatore), non serve più la connessione.