ToolDeck

Validatore JSON Schema

Valida dati JSON contro un JSON Schema (Draft 7)

Prova un esempio

Dati JSON

JSON Schema

Esegue in locale · Sicuro per incollare segreti
Esegue in locale · Sicuro per incollare segreti

Cos'è la validazione di JSON Schema?

La validazione di JSON Schema è il processo di verifica che un documento JSON sia conforme a un insieme di vincoli strutturali e di valore definiti in un JSON Schema. Lo schema stesso è un documento JSON che descrive la forma attesa dei tuoi dati: quali proprietà sono obbligatorie, quali tipi devono avere, gli intervalli consentiti per i numeri, i pattern delle stringhe, le lunghezze degli array e altro ancora. La specifica JSON Schema è mantenuta su json-schema.org e pubblicata come serie di draft IETF; Draft 7 e Draft 2020-12 sono i più ampiamente adottati.

Mentre la semplice validazione JSON controlla solo la sintassi (le parentesi sono bilanciate? le stringhe sono tra virgolette?), la validazione di schema va oltre. Risponde a domande come: la risposta di questa API contiene un campo "id" che è sempre un intero? Il campo "status" è uno dei tre valori consentiti? Gli oggetti annidati hanno la forma corretta? Questo tipo di verifica strutturale individua bug che i controlli sintattici non rileverebbero mai, perché un JSON sintatticamente valido può essere semanticamente errato per la tua applicazione.

JSON Schema è usato nelle definizioni OpenAPI/Swagger, nella validazione di file di configurazione, nella validazione di form, nei vincoli sui documenti di database e nei test automatizzati. Strumenti come Ajv (JavaScript), jsonschema (Python) e check-jsonschema (CLI) implementano la specifica per validare i dati in modo programmatico. Questo validatore online ti permette di incollare sia uno schema che un documento dati per verificarne la conformità istantaneamente, senza installare alcuna libreria.

Perché usare un validatore JSON Schema online?

Scrivere schemi e fare il debug degli errori di validazione a mano è lento. Un validatore JSON Schema online ti dà un feedback immediato su se i tuoi dati corrispondono allo schema, con messaggi di errore chiari che indicano la proprietà esatta che ha fallito.

Feedback di validazione istantaneo
Incolla il tuo schema e i tuoi dati e vedi i risultati della validazione in tempo reale. Ogni errore mostra il percorso JSON e il vincolo specifico che non è stato rispettato, così puoi risolvere i problemi senza dover leggere l'output di una libreria di validazione.
🔒
Privacy garantita, elaborazione solo nel browser
I tuoi dati JSON non lasciano mai il browser. Tutta la validazione viene eseguita localmente in JavaScript. Nessun server, nessun log, nessuna conservazione dei dati. Sicuro per gli schemi che descrivono API interne o che contengono nomi di campi proprietari.
🎯
Validazione consapevole del draft
Il validatore gestisce le parole chiave dello schema Draft 7 tra cui type, required, properties, enum, pattern, minimum/maximum, items, anyOf, oneOf, allOf e additionalProperties. Testa il tuo schema qui prima di integrarlo nella tua pipeline di build o nella tua test suite.
📋
Nessun account o installazione
Apri la pagina, incolla il tuo JSON e valida. Nessun npm install, nessun pacchetto pip, nessuna immagine Docker. Utile quando hai bisogno di un rapido controllo dello schema su una macchina su cui non puoi installare strumenti di sviluppo.

Casi d'uso della validazione JSON Schema

Test del contratto API
Valida le risposte API rispetto allo schema definito nella tua specifica OpenAPI. Individua le modifiche che rompono la compatibilità, come un campo che passa da intero a stringa, prima che raggiungano la produzione.
Verifica dei file di configurazione
Controlla che i file di configurazione JSON per le pipeline CI/CD, i manifest Kubernetes o le impostazioni dell'applicazione corrispondano allo schema atteso prima del commit. Previene i fallimenti di deployment causati da chiavi mancanti o errate.
Gate nei pipeline DevOps
Aggiungi la validazione dello schema come passaggio CI per rifiutare payload che violano il contratto. Funziona per i file di variabili Terraform, gli input di GitHub Actions o qualsiasi JSON strutturato consumato dall'automazione.
QA e revisione dei dati di test
Verifica che i fixture di test e i file di dati mock siano conformi allo stesso schema che la tua applicazione si aspetta. Dati di test non corrispondenti sono una fonte comune di risultati di test falsi positivi.
Acquisizione in pipeline di dati
Valida i record JSON in ingresso all'inizio di una pipeline di dati. La validazione dello schema filtra gli eventi malformati prima che raggiungano il tuo data warehouse, riducendo i costi di pulizia a valle.
Apprendimento della sintassi JSON Schema
Sperimenta con le parole chiave dello schema in modo interattivo. Scrivi uno schema, incolla dati di test e vedi quali vincoli vengono superati o falliti. Più veloce che scrivere uno script ed eseguirlo dal terminale ogni volta.

Riferimento alle parole chiave JSON Schema

Un JSON Schema è costruito da parole chiave che ciascuna impone un vincolo sui dati validati. La tabella seguente elenca le parole chiave più comunemente usate in Draft 7 e versioni successive. Ogni parola chiave può essere combinata con altre nello stesso oggetto schema.

Parola chiaveScopoEsempio
typeRestricts the data type"type": "string"
propertiesDefines expected object keys and their schemas"properties": { "name": { "type": "string" } }
requiredLists mandatory properties"required": ["id", "name"]
itemsSchema for array elements"items": { "type": "number" }
enumRestricts value to a fixed set"enum": ["active", "inactive"]
patternRegex constraint on strings"pattern": "^[A-Z]{2}\\d{4}$"
minimum / maximumNumeric range bounds"minimum": 0, "maximum": 100
minLength / maxLengthString length bounds"minLength": 1, "maxLength": 255
$refReuses another schema by URI"$ref": "#/$defs/address"
additionalPropertiesControls extra keys in objects"additionalProperties": false
anyOf / oneOf / allOfCombines multiple schemas logically"anyOf": [{ "type": "string" }, { "type": "null" }]
if / then / elseConditional schema application"if": { "properties": { "type": { "const": "email" } } }

Confronto dei draft JSON Schema: Draft 7 vs 2019-09 vs 2020-12

JSON Schema ha attraversato diverse versioni di draft. Draft 7 (pubblicato nel 2018) è il più ampiamente supportato dagli strumenti. Draft 2019-09 ha introdotto $defs (in sostituzione di definitions), unevaluatedProperties e $recursiveRef. Draft 2020-12 (l'ultimo rilascio stabile) ha sostituito $recursiveRef con $dynamicRef e introdotto prefixItems per la validazione delle tuple. Quando scegli un draft, verifica che la tua libreria di validazione lo supporti. Ajv supporta tutti e tre i draft. La libreria jsonschema di Python supporta fino a 2020-12 dalla versione 4.0.

FunzionalitàDraft 7Draft 2019-09Draft 2020-12
$schema URIdraft-07/schema#2019-09/schema2020-12/schema
if / then / elseYesYesYes
$defs (definitions)definitions$defs$defs
$ref alongside keysNo (sibling ignored)YesYes
$dynamicRefNoNo ($recursiveRef)Yes
prefixItemsNo (use items array)No (use items array)Yes
unevaluatedPropertiesNoYesYes
$vocabularyNoYesYes

Esempi di codice

Questi esempi mostrano come validare JSON rispetto a uno schema in modo programmatico. Ciascuno utilizza una libreria ben mantenuta per il proprio ecosistema linguistico.

JavaScript (Ajv)
import Ajv from 'ajv';

const ajv = new Ajv();

const schema = {
  type: 'object',
  properties: {
    name: { type: 'string', minLength: 1 },
    age: { type: 'integer', minimum: 0 },
    email: { type: 'string', format: 'email' }
  },
  required: ['name', 'email'],
  additionalProperties: false
};

const data = { name: 'Alice', age: 30, email: 'alice@example.com' };

const validate = ajv.compile(schema);
const valid = validate(data);
console.log(valid);          // → true
console.log(validate.errors); // → null

// Invalid data — missing required "email"
validate({ name: 'Bob', age: 25 });
console.log(validate.errors);
// → [{ instancePath: '', keyword: 'required', params: { missingProperty: 'email' } }]
Python (jsonschema)
from jsonschema import validate, ValidationError

schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string", "minLength": 1},
        "age": {"type": "integer", "minimum": 0},
        "tags": {
            "type": "array",
            "items": {"type": "string"},
            "uniqueItems": True
        }
    },
    "required": ["name"]
}

# Valid data
validate(instance={"name": "Alice", "age": 30, "tags": ["admin"]}, schema=schema)
# → No exception raised

# Invalid data — wrong type for "age"
try:
    validate(instance={"name": "Alice", "age": "thirty"}, schema=schema)
except ValidationError as e:
    print(e.message)
    # → 'thirty' is not of type 'integer'
    print(e.json_path)
    # → $.age
Go (santhosh-tekuri/jsonschema)
package main

import (
    "fmt"
    "strings"
    "github.com/santhosh-tekuri/jsonschema/v5"
)

func main() {
    schemaJSON := `{
        "type": "object",
        "properties": {
            "id": { "type": "integer" },
            "status": { "enum": ["active", "inactive"] }
        },
        "required": ["id", "status"]
    }`

    compiler := jsonschema.NewCompiler()
    compiler.AddResource("schema.json", strings.NewReader(schemaJSON))
    schema, _ := compiler.Compile("schema.json")

    // Valid data
    data := map[string]interface{}{"id": 1, "status": "active"}
    err := schema.Validate(data)
    fmt.Println(err) // → <nil>

    // Invalid — missing "status"
    bad := map[string]interface{}{"id": 2}
    err = schema.Validate(bad)
    fmt.Println(err) // → validation failed: missing properties: 'status'
}
CLI (check-jsonschema)
# Install via pip
pip install check-jsonschema

# Validate a file against a schema
check-jsonschema --schemafile schema.json data.json
# → ok -- validation done

# Validate against a remote schema (e.g., GitHub Actions workflow)
check-jsonschema --builtin-schema vendor.github-workflows my-workflow.yml

# Validate multiple files at once
check-jsonschema --schemafile schema.json file1.json file2.json file3.json

Domande frequenti

Qual è la differenza tra validazione JSON e validazione JSON Schema?
La validazione JSON verifica se una stringa è sintassi JSON valida: parentesi correttamente annidate, chiavi tra virgolette, nessuna virgola finale. La validazione JSON Schema va un passo oltre e verifica se i dati JSON analizzati corrispondono a un contratto strutturale: tipi corretti, campi obbligatori presenti, valori entro gli intervalli consentiti. È necessario avere un JSON valido prima di poter applicare uno schema, ma un JSON valido può comunque fallire la validazione dello schema.
Quale draft JSON Schema dovrei usare?
Draft 7 è il default più sicuro. Ha il supporto librerie più ampio tra i linguaggi e copre le parole chiave di cui la maggior parte dei progetti ha bisogno: type, properties, required, enum, pattern, anyOf, oneOf, allOf e $ref. Usa Draft 2020-12 se hai bisogno di funzionalità come prefixItems per la validazione delle tuple, $dynamicRef per schemi estensibili o unevaluatedProperties per forme di oggetti rigide. Controlla la documentazione della tua libreria di validazione per confermare il supporto al draft prima di aggiornare.
Come funziona $ref in JSON Schema?
La parola chiave $ref ti permette di fare riferimento a un altro schema tramite URI invece di duplicarlo. Un valore come "$ref": "#/$defs/address" punta a uno schema definito nella sezione $defs dello stesso documento. Puoi anche fare riferimento a file esterni con "$ref": "https://example.com/schemas/address.json". In Draft 7, $ref sostituisce tutte le parole chiave adiacenti nello stesso oggetto. In Draft 2019-09 e versioni successive, le parole chiave adiacenti vengono applicate insieme a $ref.
Qual è la differenza tra anyOf, oneOf e allOf?
allOf richiede che i dati corrispondano a ogni sub-schema nell'array. anyOf richiede la corrispondenza con almeno un sub-schema. oneOf richiede la corrispondenza con esattamente un sub-schema e fallisce se i dati corrispondono a zero o più di uno. Per i campi nullable, anyOf con un tipo e null è comune: {"anyOf": [{"type": "string"}, {"type": "null"}]}. Usa oneOf quando i sub-schema sono mutuamente esclusivi, come nelle unioni con tag.
JSON Schema può validare oggetti e array annidati?
Sì. Usa la parola chiave properties per definire gli schemi per le chiavi di oggetti annidati e la parola chiave items per definire uno schema che ogni elemento dell'array deve rispettare. Puoi annidarli a qualsiasi profondità. Per gli array in cui ogni posizione ha uno schema diverso (tuple), usa prefixItems in Draft 2020-12 o la forma array di items in Draft 7.
I dati che incolla in questo strumento vengono inviati a un server?
No. Il validatore viene eseguito interamente nel tuo browser usando JavaScript. I tuoi dati JSON e lo schema non vengono mai trasmessi ad alcun server. Puoi verificarlo aprendo l'inspector di rete del tuo browser mentre usi lo strumento.
Come posso validare JSON Schema in una pipeline CI/CD?
Usa un validatore CLI come check-jsonschema (Python/pip) o ajv-cli (Node.js/npm). Entrambi accettano un file schema e uno o più file di dati come argomenti. Aggiungi il comando di validazione come passaggio nella tua configurazione CI. Se la validazione fallisce, il processo termina con un codice non zero, che blocca la pipeline. Per GitHub Actions, puoi anche usare direttamente l'action check-jsonschema.