Skip to content

Validatore JSON Schema

Valida JSON contro qualsiasi JSON Schema istantaneamente nel browser. Supporta Draft 2020-12, 2019-09 e Draft-07 con messaggi di errore con percorso preciso. 100% privato — nessun upload, nessun account, gratis.

Niente tracciamento Funziona nel browser Gratuito
Incolla sia i dati JSON sia uno schema
Verificato per la conformità a Draft 2020-12, 2019-09 e Draft-07, inclusi casi limite di coercizione di tipo, vocabolario format, risoluzione $ref e percorsi errore JSON Pointer. — Go Tools API Tooling Team · May 7, 2026

Cos'è un Validatore JSON Schema?

Un validatore JSON Schema è un programma che prende due documenti JSON — un documento dati e un documento schema — e segnala se i dati rispettano il contratto dello schema. Lo schema dichiara tipi di campo, key required, range di valori, valori enum ammessi, pattern regex e regole strutturali tramite un vocabolario fisso (type, properties, required, items, enum, oneOf, allOf, $ref, format). Il validatore percorre entrambi i documenti in parallelo ed emette zero o più errori, ciascuno fissato a un percorso JSON Pointer all'interno dei dati.

La validazione viene eseguita a runtime, al confine tra l'input non fidato e il tuo codice. I tipi TypeScript scompaiono al tempo di compilazione e non possono aiutarti con JSON che arriva da un webhook, un'API di terze parti o un incolla utente — questo vuoto è esattamente ciò che JSON Schema riempie. Abbinalo a TypeScript (o Pydantic in Python) e ottieni garanzie a tempo di compilazione dentro la tua base di codice più garanzie a runtime al confine.

Draft 2020-12 è la specifica corrente e quella che dovresti scegliere per nuovi progetti nel 2026. Draft precedenti (2019-09, Draft-07, Draft-06, Draft-04) sopravvivono nelle basi legacy — Draft-07 è ancora comune nei chart Helm, nelle impostazioni di VS Code e nelle vecchie configurazioni Ajv. OpenAPI 3.1 usa Draft 2020-12 nativamente; OpenAPI 3.0 usa un sottoinsieme di Draft 4.

Questo strumento viene eseguito interamente nel browser. Il tuo JSON, il tuo schema e l'output della validazione non lasciano mai la tua macchina — sicuro per contratti API proprietari e payload sensibili. I puntatori $ref interni si risolvono automaticamente; i ref HTTP esterni sono intenzionalmente disabilitati per preservare la privacy.

Lavori con strumenti JSON correlati? Formatta il JSON con Formattatore JSON prima di incollare; confronta due documenti JSON con JSON Diff; converti con JSON to YAML e YAML to JSON. Per la validazione end-to-end in Node, Python e browser, consulta la nostra guida alla validazione JSON Schema.

// A 5-line schema that catches three real bugs
const schema = {
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id":    { "type": "integer", "minimum": 1 },
    "email": { "type": "string", "format": "email" },
    "age":   { "type": "integer", "minimum": 0, "maximum": 150 }
  },
  "required": ["id", "email"],
  "additionalProperties": false
};

// Three bugs the schema catches:
const bad = { "id": "42", "age": 200 };
//   /id   → type: expected integer, got string
//   /email → required: missing
//   /age   → maximum: 200 > 150

// In Node:        new Ajv().compile(schema)(bad)  // false; ajv.errors has the paths
// In Python:      jsonschema.validate(bad, schema)
// In the browser: this tool — same errors, same paths, no install

Funzionalità principali

Supporto multi-Draft

Draft 2020-12 (predefinito), 2019-09 e Draft-07. Rileva automaticamente il draft dall'URI $schema; selettore di fallback per gli schemi che non lo hanno.

Errori con percorso preciso

Ogni errore include un JSON Pointer (es. /user/email/0), la keyword fallita (type, required, pattern) e un messaggio di una riga. Clicca per saltare alla posizione.

Validazione live

Valida mentre scrivi. Gli errori si aggiornano in tempo reale così iteri sullo schema o sui dati senza passare dai pulsanti Validate.

Copertura keyword format

email, uri, uuid, date, date-time, ipv4, ipv6, hostname, regex — i format che usi davvero, validati con pattern collaudati.

100% basato sul browser

Gli input non lasciano mai la tua macchina. Nessun upload, nessuna analisi su ciò che incolli, nessun localStorage del JSON. Sicuro per contratti proprietari e payload sensibili.

Schemi di esempio, un clic

Preset caricabili (form di registrazione, busta webhook, file di configurazione, array di ordini) ti portano a una validazione funzionante in meno di cinque secondi.

Esempi

Oggetto valido — required + tipi

{
  "id": 42,
  "email": "alice@example.com",
  "age": 30
}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": { "type": "integer", "minimum": 1 },
    "email": { "type": "string", "format": "email" },
    "age": { "type": "integer", "minimum": 0, "maximum": 150 }
  },
  "required": ["id", "email"],
  "additionalProperties": false
}

Lo schema dichiara id ed email come required e fissa i tipi. I dati sopra superano la validazione — ogni vincolo è soddisfatto. Prova a rimuovere email o a cambiare id in stringa per vedere errori con percorso preciso.

Non valido — manca required + tipo errato

{
  "id": "42",
  "age": 200
}
{
  "type": "object",
  "properties": {
    "id": { "type": "integer" },
    "email": { "type": "string", "format": "email" },
    "age": { "type": "integer", "maximum": 150 }
  },
  "required": ["id", "email"]
}

Tre errori: /id è una stringa invece di un intero, /email manca, /age (200) supera maximum 150. Ogni errore riporta il percorso JSON Pointer esatto così puoi correggere i dati — o allentare lo schema — senza tirare a indovinare.

Unione discriminata — oneOf con const

{
  "type": "order.created",
  "data": { "orderId": "ORD-001234", "totalUsd": 49.99 }
}
{
  "oneOf": [
    {
      "properties": {
        "type": { "const": "order.created" },
        "data": {
          "type": "object",
          "properties": {
            "orderId": { "type": "string", "pattern": "^ORD-[0-9]{6}$" },
            "totalUsd": { "type": "number", "minimum": 0 }
          },
          "required": ["orderId", "totalUsd"]
        }
      },
      "required": ["type", "data"]
    },
    {
      "properties": {
        "type": { "const": "order.refunded" },
        "data": { "type": "object", "required": ["refundId"] }
      },
      "required": ["type", "data"]
    }
  ]
}

Validazione di una busta webhook. Il primo ramo di oneOf corrisponde perché type è "order.created". Cambia type in "order.refunded" o rompi il pattern di orderId per vedere come oneOf riporta i fallimenti per ramo.

Array di oggetti — items + uniqueItems

[
  { "sku": "A1", "qty": 3 },
  { "sku": "B2", "qty": 5 },
  { "sku": "A1", "qty": 3 }
]
{
  "type": "array",
  "minItems": 1,
  "uniqueItems": true,
  "items": {
    "type": "object",
    "properties": {
      "sku": { "type": "string", "pattern": "^[A-Z][0-9]+$" },
      "qty": { "type": "integer", "minimum": 1 }
    },
    "required": ["sku", "qty"]
  }
}

Due elementi sono identici byte per byte, quindi uniqueItems si attiva. Gli elementi 0 e 2 collidono — il validatore segnala il duplicato alla radice dell'array. Utile per intercettare duplicati di righe carrello e bug di merge in richieste di spedizione.

Come si usa

  1. 1

    Incolla il tuo JSON Schema

    Inserisci il tuo schema nel pannello destro. Il validatore rileva automaticamente il draft dall'URI $schema se presente; altrimenti scegli Draft 2020-12, 2019-09 o Draft-07 dalla toolbar.

  2. 2

    Incolla i tuoi dati JSON

    Inserisci il documento JSON che vuoi controllare nel pannello sinistro. La validazione si esegue mentre scrivi; gli input grandi (>200 KB) passano a un pulsante Validate manuale per mantenere la digitazione reattiva.

  3. 3

    Leggi l'elenco degli errori

    Ogni errore ha un percorso JSON Pointer, una keyword e un messaggio di una riga. Clicca su un errore per saltare alla posizione nei tuoi dati, correggilo e guarda il contatore scendere in tempo reale.

Trappole comuni di JSON Schema

Type: integer vs number

JSON Schema tratta 1.0 come number ma non come integer. Se il tuo contratto dice integer, il validatore rifiuta 1.0 — anche se la maggior parte dei linguaggi lo considera uguale a 1. Scegli number a meno che non ti serva davvero integer.

✗ Errato
{ "qty": 1.0 }   schema: { "type": "integer" }   → error: not an integer
✓ Corretto
{ "qty": 1 }     schema: { "type": "integer" }   → valid

required al livello di annidamento sbagliato

required deve stare accanto a properties, non dentro una proprietà. Un array required dentro la dichiarazione di una proprietà viene ignorato silenziosamente — il validatore non lo applica mai.

✗ Errato
{ "properties": { "name": { "type": "string", "required": true } } }
✓ Corretto
{ "properties": { "name": { "type": "string" } }, "required": ["name"] }

additionalProperties di default è true

Senza additionalProperties: false lo schema è aperto — ogni key extra passa. Dimenticarlo è il motivo più comune per cui gli schemi "accettano tutto".

✗ Errato
{ "properties": { "id": { "type": "integer" } } }   accepts: { "id": 1, "foo": "bar", "x": null }
✓ Corretto
{ "properties": { "id": { "type": "integer" } }, "additionalProperties": false }

OpenAPI 3.0 nullable vs array di tipi Draft 2020-12

OpenAPI 3.0 usa nullable: true; Draft 2020-12 usa type: ["string", "null"]. Mescolarli produce schemi che sembrano corretti ma in realtà non permettono mai null.

✗ Errato
{ "type": "string", "nullable": true }   in 2020-12: nullable is just an unknown keyword
✓ Corretto
{ "type": ["string", "null"] }   in 2020-12: explicitly allows null

Pattern senza ancore

Il regex di JSON Schema corrisponde ovunque per default — pattern: "^[A-Z]+$" ancora a tutta la stringa, ma pattern: "[A-Z]+" corrisponde se esiste qualsiasi maiuscola in qualunque punto.

✗ Errato
pattern: "[A-Z]+"   accepts: "helloX"   (because X matches)
✓ Corretto
pattern: "^[A-Z]+$"   accepts only: "HELLO"

oneOf dove serviva anyOf

oneOf richiede che corrisponda esattamente un ramo. Se due rami accettano la stessa forma, oneOf fallisce su dati che anyOf accetterebbe — e il messaggio d'errore è confuso ("matches more than one").

✗ Errato
oneOf: [ { type: "string" }, { type: "string", maxLength: 10 } ]   on: "hi"   → error: matches both
✓ Corretto
anyOf: [ { type: "string" }, { type: "string", maxLength: 10 } ]   on: "hi"   → valid

Casi d'uso comuni

Validazione richiesta API
Incolla un corpo di richiesta e lo schema del tuo endpoint prima del deploy. Intercetta le risposte 400 che i tuoi test non hanno coperto — campi required mancanti, tipi sbagliati, numeri fuori range.
Verifica payload webhook
Il vendor ha inviato un payload che il tuo handler rifiuta? Valida il payload reale contro il tuo schema, poi contro lo schema pubblicato del vendor. La differenza tra i due è il tuo bug.
Linting di file di configurazione
package.json, tsconfig.json, helm values.yaml — ogni file di configurazione ha uno schema pubblico. Incolla lo schema, incolla la configurazione, trova il typo. Salta il tentativi-ed-errori.
Test componenti OpenAPI
Estrai un componente di schema da un documento OpenAPI 3.1, incollalo qui, valida payload di esempio. Più veloce che tirare su un mock server, deterministico, nessun SDK richiesto.
Pre-flight invio form
Incolla un payload form di esempio prima di cablare la validazione frontend. Conferma che lo schema rifiuta ciò che ti aspetti, accetta ciò che ti aspetti, poi invia lo stesso schema a client e server.
Verifica contratto pipeline dati
L'output ETL è andato in deriva? Incolla una riga di esempio e lo schema a valle. Individua quale producer è cambiato e quali key si sono rotte prima che la pipeline ritenti 10.000 record.

Dettagli tecnici

Conforme a Draft 2020-12
Implementa la specifica Draft 2020-12 pubblicata — keyword, sistema di tipi, vocabolario format. Verificato contro l'output di Ajv 8.x e ajv-formats.
Percorsi errore JSON Pointer
Gli errori usano JSON Pointer RFC 6901 (/user/email/0). Ogni fallimento di keyword punta a una singola posizione risolvibile nei dati — nessuna ambiguità, nessuna ricerca per stringa.
Risoluzione interna $ref
Risolve i puntatori $ref all'interno di un singolo documento (#/$defs/foo, #/properties/bar). Cicli rilevati e segnalati. $ref HTTP esterni disabilitati per privacy.

Best Practice

Imposta sempre additionalProperties: false
Sui contratti di input (corpi di richiesta, file di configurazione, messaggi di coda) le key sconosciute sono di solito bug — typo, campi accidentali o sondaggi di un attaccante. Rifiutale per default.
Usa $defs per sotto-schemi riutilizzabili
Inlinare due volte la stessa forma porta a divergenza. Sposta le definizioni condivise in $defs e referenziale con $ref — un'unica fonte di verità, ogni modifica si applica ovunque.
Valida prima della logica di business
Esegui la validazione dello schema subito dopo JSON.parse, prima di toccare la struttura analizzata. Restringimento di tipo, default e persistenza presuppongono tutti che il contratto regga — assicurati che regga.

Domande frequenti

Cos'è la validazione JSON Schema?
La validazione JSON Schema verifica se un documento JSON corrisponde a un contratto scritto in sintassi JSON Schema. Lo schema dichiara tipi di campo, key required, valori ammessi e regole strutturali; il validatore percorre entrambi i documenti in parallelo e segnala ogni percorso che viola il contratto. Si esegue al confine tra l'input non fidato (richiesta API, webhook, file di configurazione, payload di form) e la tua logica di business — intercettando errori di forma prima che corrompano il codice a valle. Consulta la nostra guida completa alla validazione JSON Schema per esempi end-to-end in Node, Python e browser.
Quali draft di JSON Schema supporta questo validatore?
Draft 2020-12 (predefinito e raccomandato), Draft 2019-09 e Draft-07. Il validatore rileva automaticamente il draft dall'URI $schema dello schema quando presente, altrimenti ricade sulla tua scelta dal menu a tendina. Per nuovi progetti nel 2026 usa Draft 2020-12 — è ciò che OpenAPI 3.1 usa nativamente e ciò che Ajv adotta per default. Draft-07 resta comune in basi di codice legacy (configurazioni AJV vecchie, chart Helm, impostazioni di VS Code).
Come valido JSON contro uno schema?
Incolla i tuoi dati JSON nel pannello sinistro e il tuo JSON Schema nel pannello destro. Il validatore si esegue istantaneamente mentre scrivi — il segno di spunta verde significa valido, l'elenco rosso significa errori. Ogni errore include un percorso JSON Pointer (per esempio /user/email), la keyword fallita (type, required, pattern, minimum) e un messaggio leggibile. Clicca su un errore per saltare alla riga problematica. Nessun upload, nessuna registrazione.
Qual è la differenza tra validazione JSON Schema e validazione di sintassi JSON?
La validazione di sintassi JSON conferma solo che il documento si analizza — niente virgole in eccesso, niente parentesi mancanti. Formattatore JSON se ne occupa. La validazione JSON Schema viene eseguita dopo il parsing e verifica se la struttura analizzata corrisponde al contratto: campi required presenti, tipi corretti, valori nel range. In genere esegui entrambe — prima formatta per confermare che si analizza, poi valida contro lo schema.
Perché il mio schema rifiuta JSON che sembra corretto?
Cinque sospetti abituali: (1) additionalProperties: false — i tuoi dati hanno una key non dichiarata dallo schema, spesso un typo o un nuovo campo; (2) type: "integer" vs "number" — JSON Schema tratta 1.0 come number, non integer; (3) le keyword format (email, uri, uuid) rifiutano stringhe mal formate anche quando sembrano corrette; (4) required al livello di annidamento sbagliato — required deve apparire accanto a properties, non dentro una; (5) il JSON ha la stringa "42" dove lo schema si aspetta l'intero 42. Il percorso dell'errore individuerà quale è.
Supporta $ref e riferimenti remoti a schemi?
I puntatori $ref interni (#/$defs/foo, #/properties/bar) funzionano subito. I $ref remoti verso URL esterne sono intenzionalmente disabilitati — scaricare schemi esterni esporrebbe la tua attività di validazione a terzi e romperebbe il modello di privacy. Per validare contro uno schema multi-file, includi le definizioni referenziate in un singolo documento usando $defs, oppure esegui la validazione nella tua CI con Ajv dove i ref remoti sono appropriati.
Cosa fa additionalProperties: false?
additionalProperties: false rifiuta qualsiasi key non dichiarata in properties. È la singola keyword più utile per stringere i contratti — senza, gli schemi sono aperti per default e accettano silenziosamente campi sbagliati o malevoli. Imposta sempre additionalProperties: false sui contratti di input (corpi di richiesta, file di configurazione, messaggi di coda). Lascialo a true (od ometti) solo quando lo schema è una descrizione parziale di un documento più grande.
Come valido JSON contro uno schema in Node.js o Python?
Node: installa Ajv (npm i ajv ajv-formats), chiama new Ajv().compile(schema), poi validate(data). Python: installa jsonschema (pip install jsonschema), chiama jsonschema.validate(data, schema). Per TypeScript, genera i tipi dallo schema con json-schema-to-typescript così tempo di compilazione e tempo di esecuzione restano allineati. La nostra guida alla validazione JSON Schema ha ricette pronte da copiare per Node, Python e browser.
Qual è la differenza tra oneOf, anyOf e allOf?
allOf — deve corrispondere a ogni sotto-schema (intersezione, usato per la composizione). anyOf — deve corrispondere ad almeno uno (unione, fast-fail). oneOf — deve corrispondere esattamente a uno (unione discriminata, più lenta ma più rigorosa). Usa oneOf per unioni discriminate come gli eventi webhook etichettati per type; usa anyOf per unioni permissive; usa allOf per estendere uno schema base con vincoli aggiuntivi. oneOf è il più lento perché testa ogni ramo — preferisci anyOf quando l'unicità non serve.
Supporta gli schemi OpenAPI?
OpenAPI 3.1 usa Draft 2020-12 nativamente, quindi qualsiasi componente di schema OpenAPI 3.1 si incolla direttamente. OpenAPI 3.0 usa un sottoinsieme di Draft 4 in gran parte compatibile — potresti incappare in casi limite con nullable: true (sintassi 3.0) che Draft 2020-12 esprime come type: ["string", "null"]. Per la validazione completa di un documento OpenAPI (paths, operations, security), usa un linter dedicato come Spectral; questo strumento si concentra sulla parte schema.
Perché il validatore dice che il mio JSON Schema è esso stesso non valido?
Un JSON Schema è un documento JSON che deve essere JSON valido prima di poter essere uno schema valido. Cause comuni: virgola finale in un oggetto properties, apici singoli al posto dei doppi, $schema impostato su una URL di draft inesistente, o required elencato come stringa invece che come array. Formatta prima lo schema in Formattatore JSON per far emergere i problemi di sintassi, poi reincollalo qui per la validazione semantica.
Lo strumento invia il mio JSON o schema a un server?
No. Tutto il parsing e la validazione vengono eseguiti localmente nel browser. Il tuo JSON, il tuo schema e i risultati di validazione non lasciano mai la tua macchina — nessun upload, nessun localStorage degli input, nessuna analisi su ciò che incolli. Sicuro per contratti API proprietari, file di configurazione interni e payload sensibili. Solo la tua scelta di draft persiste in localStorage per sopravvivere a un refresh; cancella i dati del browser per pulirla.
Posso validare JSON Lines (NDJSON) o più documenti?
Questo strumento valida un documento per esecuzione. Per JSON Lines, valida ogni riga singolarmente o usa Ajv in Node con uno schema e un parser di stream come JSONStream. Per la validazione batch di grandi dataset, preferisci la riga di comando — ajv-cli o check-jsonschema (Python) gestiscono migliaia di file al secondo con una singola compilazione di schema.

Strumenti correlati

Vedi tutti gli strumenti →