Errori comuni nel JSON e come correggerli

Aggiornato:

JSON è il formato che molte API, file di configurazione e applicazioni web usano per scambiarsi dati, e la sua grammatica sta in una sola pagina. È anche per questo che non perdona: un testo o è JSON valido o non lo è, e basta una virgola fuori posto perché un parser lo rifiuti per intero. La maggior parte degli errori nasce dalle stesse poche abitudini, molte delle quali ereditate da JavaScript o da altri linguaggi. Questa guida elenca le regole, gli errori che le violano più spesso, come leggere il messaggio di errore e alcuni casi che sono JSON valido ma creano comunque problemi.

Le regole che JSON ha davvero

Le definizioni attuali sono la RFC 8259, pubblicata nel dicembre 2017, e l’ECMA-404. Descrivono la stessa sintassi:

Tra un token e l’altro sono ammessi solo quattro caratteri di spaziatura: spazio, tabulazione, avanzamento riga e ritorno carrello.

Gli errori più comuni

Ognuno di questi viene rifiutato da un parser standard. La correzione è nella descrizione.

Formattatore e convertitore JSON

Leggere il messaggio di errore

Un parser legge il testo da sinistra a destra e si ferma al primo carattere che non può accettare, quindi la posizione indicata nel messaggio di errore è il punto in cui si è arreso, che spesso si trova subito dopo l’errore vero e proprio. Con una virgola finale, il parser si lamenta della parentesi graffa di chiusura, perché dopo una virgola si aspetta un altro nome di proprietà. Con una parentesi mancante, l’errore può comparire proprio alla fine del testo, lontano dal punto in cui avrebbe dovuto trovarsi la parentesi.

La formulazione cambia da un browser all’altro e da un linguaggio all’altro, e molti messaggi indicano una posizione, anche se non tutti, come numero di caratteri dall’inizio oppure come riga e colonna. Per esempio, il motore JavaScript di Chrome segnala {"name":"Ana",} così:

Quando la posizione non è chiara, guarda il carattere subito prima e controlla che ogni parentesi e ogni virgoletta aperte prima di quel punto abbiano la loro controparte. Un editor che evidenzia le parentesi corrispondenti spesso rende facile individuare quella mancante.

JSON valido che crea comunque problemi

JSON non è JavaScript

La sintassi di JSON è stata ripresa dai letterali oggetto di JavaScript, ed è per questo che i due si confondono così facilmente. Un letterale oggetto JavaScript accetta apici singoli, nomi senza virgolette, virgole finali, commenti e valori come undefined; JSON non accetta nessuna di queste cose. Il codice che funziona quando lo incolli in uno script può quindi fallire come file JSON.

Alcuni strumenti accettano formati estesi come JSON5, o il «JSON con commenti» per i file di configurazione. Sono comodi dove sono supportati, ma non sono JSON, e un parser standard, compreso il formattatore di nTools, li rifiuterà.

Domande frequenti

JSON può contenere commenti?

No. La specifica non prevede alcuna sintassi per i commenti. Se ti servono delle note nei dati, mettile in una proprietà come "_comment", oppure usa un formato che ammette i commenti, dove gli strumenti lo supportano.

Perché il mio JSON funziona in JavaScript ma non passa la verifica di un validatore?

Perché un letterale oggetto JavaScript ammette cose che JSON non ammette, come apici singoli, virgole finali e nomi senza virgolette. Incollato nel codice funziona; salvato come JSON non è valido.

Come faccio a mantenere esatto un numero molto grande?

Invialo come stringa, per esempio "9007199254740993", e convertilo dal lato di chi lo riceve con un tipo in grado di contenerlo, come BigInt in JavaScript.

Il formattatore di nTools invia il mio JSON da qualche parte?

No. Viene analizzato e formattato nel tuo browser e, quando il browser indica una posizione, il formattatore la mostra come riga e colonna.

Guide correlate