Guida di approfondimento
JSON: sintassi, tipi, struttura e validazione
Una guida completa a JSON come formato di scambio dati: grammatica, tipi, parsing, serializzazione, validazione e interoperabilità.
Che cos'è JSON e perché è così diffuso
JSON, JavaScript Object Notation, è un formato testuale per rappresentare dati strutturati. È indipendente dal linguaggio di programmazione e viene usato in API, configurazioni, file di scambio e persistenza leggera.
Il suo successo deriva da una sintassi piccola, leggibile e facilmente mappabile su strutture comuni come oggetti, dizionari, liste e valori scalari. La semplicità non elimina però la necessità di distinguere sintassi valida, struttura attesa e significato applicativo.
Oggetti, array e tipi di valore
Un documento JSON è un singolo valore: oggetto, array, stringa, numero, booleano oppure null. Gli oggetti contengono coppie nome-valore con chiavi stringa; gli array sono sequenze ordinate di valori e possono annidare liberamente altre strutture JSON.
JSON non definisce tipi per date, UUID, byte binari o numeri decimali a precisione arbitraria. Questi significati devono essere concordati a livello applicativo, per esempio rappresentando una data con una stringa ISO 8601 o dati binari tramite una codifica testuale.
Regole sintattiche che contano davvero
Le stringhe usano doppi apici, le proprietà sono separate da virgole e non sono ammesse trailing comma. I literal true, false e null sono minuscoli. Gli escape consentono di rappresentare virgolette, backslash e caratteri di controllo all'interno delle stringhe.
La sintassi dei numeri non ammette NaN o Infinity e non garantisce che ogni runtime conservi la stessa precisione per valori molto grandi. Un documento può quindi essere sintatticamente corretto ma perdere informazione se il consumer usa un modello numerico più limitato.
Parsing, serializzazione e round trip
Il parsing trasforma il testo JSON in una struttura dati del programma; la serializzazione compie il percorso opposto. Pretty-print e minify modificano soltanto la rappresentazione degli spazi, non il valore logico del documento.
Un round trip affidabile richiede attenzione a numeri, ordine delle proprietà, Unicode e tipi applicativi. L'ordine delle chiavi di un oggetto non dovrebbe essere usato come significato di dominio, mentre l'ordine degli elementi di un array è parte della struttura.
Validità sintattica e validazione strutturale
Dire che un JSON è valido significa innanzitutto che rispetta la grammatica del formato. Non significa che contenga i campi giusti, che i valori rispettino un dominio o che una richiesta API sia semanticamente accettabile.
Per esprimere vincoli più ricchi si può usare JSON Schema: tipi richiesti, proprietà obbligatorie, pattern, intervalli, composizione di schemi e altre regole. La validazione applicativa resta comunque separata quando dipende da database, autorizzazioni o regole di business.
Errori comuni e interoperabilità
Tra gli errori frequenti ci sono apici singoli al posto dei doppi, virgole finali, commenti, chiavi non quotate e valori non previsti dallo standard. Molti di questi costrutti sono accettati da formati o parser permissivi, ma non appartengono a JSON standard.
Per scambiare dati tra sistemi conviene definire encoding UTF-8, schema o contratto dei campi, semantica di null e campi assenti, limiti numerici e strategia di evoluzione. Un payload leggibile non è automaticamente un contratto interoperabile.
Best practice e formati alternativi
Mantieni strutture prevedibili, nomi di proprietà coerenti e contratti versionabili. Evita di codificare informazioni diverse nello stesso campo e documenta chiaramente unità, timezone, enumerazioni e comportamento dei valori opzionali.
YAML privilegia la scrittura umana e le configurazioni; XML offre namespace, mixed content e un ecosistema di schema maturo. La scelta dipende dal contesto: JSON è spesso eccellente per API e dati applicativi, ma non è il formato migliore per ogni problema.