Vai al contenuto principale
riqo.ioStrumenti per grandi idee

JSON Schema: descrivere e validare strutture dati

Come JSON Schema esprime tipi, proprietà, vincoli, composizione e compatibilità dei documenti JSON.

Concetto e contesto

JSON Schema è un linguaggio dichiarativo per descrivere la forma attesa di dati JSON e verificare che un'istanza rispetti quel contratto.

Separa la validità sintattica del JSON dai requisiti strutturali e semantici che un sistema vuole imporre.

Per inquadrare correttamente il tema conviene distinguere sempre il concetto astratto dalla sua rappresentazione concreta e dal contesto in cui viene utilizzato. Questa separazione evita di trasferire automaticamente assunzioni valide in un protocollo, una libreria o un formato verso ambienti che possono applicare regole differenti.

Fondamenti e terminologia

Uno schema usa parole chiave come type, properties, required, items, enum, pattern e vincoli numerici per descrivere valori ammessi.

$id e $ref permettono di identificare e riusare definizioni, mentre le versioni del draft stabiliscono la semantica delle keyword disponibili.

La terminologia va letta insieme allo standard, alla versione o al contratto che la definisce: parole simili possono indicare proprietà diverse a seconda del livello considerato. Rendere esplicite queste definizioni migliora interoperabilità, documentazione e capacità di diagnosticare risultati inattesi.

Come funziona

La validazione confronta un'istanza con lo schema e produce errori quando un vincolo non è soddisfatto.

Le keyword di composizione come allOf, anyOf, oneOf e not consentono di costruire modelli più espressivi ma richiedono attenzione per evitare sovrapposizioni ambigue.

Nel funzionamento reale è utile seguire il percorso dei dati attraverso i diversi livelli, osservando quali trasformazioni sono reversibili, quali introducono vincoli e dove può andare persa informazione. Questo modello rende più semplice stabilire responsabilità tra producer, consumer, storage e rete.

Esempio ragionato

Un oggetto utente può richiedere name come stringa non vuota, age come intero non negativo e role limitato a una enum.

Lo stesso JSON può essere sintatticamente perfetto ma fallire lo schema perché manca una proprietà obbligatoria o un valore non appartiene al dominio previsto.

Un esempio è davvero riutilizzabile quando chiarisce non soltanto il risultato finale, ma anche le precondizioni e le proprietà che restano invarianti. Cambiando un'assunzione alla volta si può capire quali parti dell'esempio appartengono allo standard e quali sono invece scelte applicative.

Errori e misconception

JSON Schema non sostituisce le regole di business che dipendono da database, autorizzazioni o stato del sistema.

È inoltre un errore trattare default come una trasformazione automatica universale: la keyword descrive un valore consigliato ma non obbliga ogni validator a inserirlo.

Molti errori nascono da assunzioni implicite tra sistemi che sembrano compatibili ma adottano versioni, canonicalizzazioni o modelli di tipo differenti. Nei casi di interoperabilità o sicurezza conviene quindi trattare gli input anomali come casi da specificare e testare, non come eccezioni trascurabili.

Best practice e criteri di scelta

Mantieni schemi modulari, versionati e accompagnati da esempi validi e invalidi rappresentativi.

Quando evolvi un contratto valuta compatibilità backward e forward, distingui campi opzionali da nullable e documenta chiaramente la policy per proprietà sconosciute.

Una pratica robusta combina standard documentati, librerie mature, contratti espliciti e test con casi limite rappresentativi. La scelta migliore non è sempre quella più compatta o diffusa: va valutata rispetto a portabilità, leggibilità, prestazioni, sicurezza, evoluzione e costo operativo.

Guide correlate

JSON: sintassi, tipi, struttura e validazione

Una guida completa a JSON come formato di scambio dati: grammatica, tipi, parsing, serializzazione, validazione e interoperabilità.

Serializzazione e deserializzazione dei dati

Come strutture in memoria diventano rappresentazioni trasferibili e quali problemi emergono tra tipi, versioni e sistemi diversi.

JSON vs YAML vs XML: quale formato scegliere

Confronto ragionato tra JSON, YAML e XML per API, configurazione, documenti, schema e interoperabilità.

YAML: sintassi, tipi e strutture

Una guida a YAML come formato di serializzazione leggibile: scalari, collezioni, indentazione, anchor e insidie di parsing.

XML: elementi, attributi, namespace e documenti

Fondamenti di XML: struttura ad albero, attributi, namespace, encoding, validazione e interoperabilità.