JSON ha esattamente sei tipi di valore: stringa, numero, booleano, nullo, array e oggetto. Nulla nella specifica ne aggiunge un settimo. Questa lista breve e facile da enunciare e sorprendentemente facile da sbagliare nella pratica, soprattutto ai confini che ogni tipo ha e che i tipi nativi di un linguaggio non condividono.
Stringa
Testo tra doppi apici, mai apici singoli. 'hello' non e JSON
valido, solo "hello" lo e. Alcuni caratteri necessitano di escape all’interno di una stringa:
l’apice stesso (\"), una barra rovesciata (\\), e i caratteri di controllo
\n, \r, \t, \b e \f. Qualsiasi altra cosa, incluso la maggior parte del testo Unicode,
puo essere inserita senza escape purché il file sia UTF-8 valido. JSON Escape
and Unescape gestisce la conversione in entrambe
le direzioni e riporta esattamente quale carattere ha rotto una sequenza di escape
mal formata, anziche un errore di parsing generico.
Numero
Un unico tipo numerico, non tipi intero e float separati come in alcuni
linguaggi. Un numero JSON e una sequenza di cifre, un punto decimale
opzionale, e un esponente opzionale: 42, -3.14, 2.5e10. Nessun esadecimale, nessun
Infinity, nessun NaN, e nessuno zero iniziale davanti a una cifra diversa da zero (0123 e
invalido, 0.123 e corretto). Il confine piu delicato qui: il tipo Number
di JavaScript e un float a 64 bit, che non puo rappresentare esattamente ogni intero oltre circa 2^53
(circa nove mila miliardi). Analizzare un documento JSON contenente un
ID di database a 64 bit o un Snowflake ID con JSON.parse nella console di un browser
puo far tornare le cifre finali arrotondate, silenziosamente. Il JSON
Formatter di questo sito e costruito su un flusso di
token anziche su JSON.parse specificamente perche un intero di venti cifre
sopravviva un giro di andata e ritorno senza arrotondamento, e riporta i numeri che non ha potuto
rappresentare in sicurezza anziche arrotondire senza dirlo.
Booleano
Esattamente due valori letterali, in minuscolo, senza apici: true e false.
"true" e una stringa, non un booleano, e una fonte comune di bug quando un
campo che dovrebbe essere booleano viene serializzato come testo da qualche parte a monte.
Nullo
Un valore letterale, in minuscolo, senza apici: null. Rappresenta l’assenza
deliberata di un valore, che e una cosa diversa da una chiave che manca completamente.
{"middleName": null} dice “questa persona non ha un secondo nome, e
abbiamo verificato.” Un documento senza la chiave middleName affatto non dice nulla su
se ne esista una. Le API che confondono le due (usando una chiave mancante e un
valore nullo in modo intercambiabile) rendono quella distinzione impossibile da recuperare
dalla parte ricevente.
Array
Un elenco ordinato, [ ], separato da virgole, con elementi di qualsiasi tipo incluso
tipi misti nello stesso array: [1, "two", true, null] e JSON valido anche se
sarebbe una scelta di schema strana. L’ordine e garantito e
significativo; due array con gli stessi elementi in ordine diverso sono
valori diversi.
Oggetto
Un insieme non ordinato di coppie chiave-valore, { }, dove le chiavi sono sempre stringhe (anche una
chiave dall’aspetto numerico come "2" e una stringa, non un numero), i valori possono essere di qualsiasi tipo.
Due chiavi con lo stesso nome all’interno di un oggetto non sono vietate dalla
grammatica, anche se la specifica definisce il comportamento “non raccomandato” e
lascia che succeda dopo al parser; la maggior parte delle implementazioni, incluso
JSON.parse, silenziosamente mantengono l’ultima e scartano le precedenti. Il
JSON Validator segnala una chiave duplicata come un
avviso anziche lasciar passare silenziosamente un documento che ne contiene una, dato che quale
valore sopravvive e il tipo di cosa che dovrebbe essere una decisione esplicita.
Cosa nessuno dei sei puo contenere
Nessun tipo data: un timestamp e una stringa, quasi sempre in formato ISO 8601
("2026-08-24T10:00:00Z"), per convenzione piuttosto che per qualcosa che JSON
imponga. Nessun undefined: una chiave che sarebbe undefined in
JavaScript viene omessa dall’oggetto anziche scritta con quel valore,
dato che JSON non ha nessun letterale per questo. Nessuna funzione, nessun Map o Set,
nessun commento da nessuna parte nel documento. Un formato che ha bisogno di qualcuna di queste
(commenti inline nelle configurazioni, per esempio) sta scegliendo deliberatamente un formato
diverso, non un’estensione di JSON; consulta JSON vs YAML
per il compromesso che il supporto ai commenti e alcune altre comodita comportano.
Provarlo
Incolla qualsiasi documento nel JSON Viewer e ogni valore riceve il suo colore e il suo badge nell’albero, che e un modo rapido per vedere esattamente come un documento e tipizzato senza leggere il testo grezzo carattere per carattere. Per le regole di sintassi in un’occhiata, consulta il JSON Cheat Sheet.