Errori JSON più comuni dietro gli errori di parsing e come risolverli
La maggior parte degli errori di parsing JSON dipende da una breve lista di errori: una virgola finale, una stringa tra apici singoli, un commento, una chiave senza virgolette, un valore come NaN o undefined, oppure virgolette tipografiche copiate da un documento. JSON è più rigoroso del JavaScript a cui somiglia, quindi codice che a un essere umano sembra corretto può essere rifiutato dal parser. Il messaggio di errore indica una riga e una colonna, e la correzione di solito si trova in quel punto o appena prima.
Formatta JSONIl JSON non si leggeUsalo gratisLe regole imposte da JSON
Un documento JSON è un unico valore: un oggetto tra parentesi graffe, un array tra parentesi quadre, una stringa, un numero, true, false o null. All'interno di questi valori:
- Ogni chiave e ogni stringa usa virgolette doppie dritte, come in «name».
- Le virgole separano gli elementi, e non deve esserci una virgola dopo l'ultimo elemento di un oggetto o di un array.
- I numeri non possono avere il segno più iniziale, e NaN, Infinity e undefined non sono numeri o valori validi.
- I commenti non sono ammessi.
- Le chiavi devono essere stringhe, quindi una chiave senza virgolette come name: non è valida.
Alcuni parser ne accettano alcune per impostazione predefinita, e alcuni strumenti accettano per comodità JSON con commenti. Questa tolleranza nasconde il problema finché il file non arriva a un lettore più rigoroso, quindi scrivi la forma rigorosa.
Leggere il messaggio di errore
I parser segnalano il primo punto in cui non riescono a proseguire. Il messaggio descrive il problema e indica una posizione, di solito una riga e una colonna. Ecco un piccolo file con una virgola finale in un array e un'altra dopo l'ultima proprietà:
{
"name": "Ada",
"tags": ["a", "b",],
}
Python segnala questo come «Illegal trailing comma before end of array: line 3 column 20». La formulazione cambia da uno strumento all'altro, e alcuni parser più vecchi dicono soltanto «Unexpected token» con uno scostamento in caratteri. Vai alla posizione indicata, poi guarda il carattere che la precede. L'errore reale è spesso una virgola, un apice o una graffa uno o due caratteri prima del punto segnalato.
Altri messaggi del parser di Python e il loro significato di solito:
- «Expecting property name enclosed in double quotes» per '{'a': 1}' indica una chiave tra apici singoli o senza virgolette.
- «Expecting value» nella posizione in cui ti aspettavi un numero o una stringa spesso indica una virgoletta tipografica, perché il parser la vede come carattere sconosciuto.
- «Expecting ',' delimiter» di solito indica una virgola mancante tra due elementi, oppure un commento in mezzo ai dati.
Virgolette tipografiche e testo copiato
Le virgolette tipografiche sono il caso più confuso, perché sembrano quasi identiche a quelle dritte. Un file JSON copiato da un elaboratore di testi, da una pagina web o da un messaggio in chat può contenere virgolette doppie tipografiche. Il file ti sembra corretto, ma l'analisi non riesce, perché il parser vede “x” come un carattere sconosciuto invece che come delimitatore di stringa.
I caratteri nascosti causano lo stesso tipo di errore. Uno spazio unificatore tra due valori non è uno spazio bianco per il parser. Rimuovi caratteri nascosti prima di provare a riparare la struttura a mano, e poi correggi le virgolette. La guida alle virgolette tipografiche spiega come raddrizzarle in sicurezza.
Apici singoli, commenti e chiavi senza virgolette
Molti sviluppatori scrivono dati simili a JSON in linguaggi che ammettono di più:
- Gli apici singoli sono validi nei letterali di JavaScript e Python, ma JSON richiede virgolette doppie. Sostituisci {'a': 1} con {"a": 1}.
- I commenti come
//o/* */vanno rimossi. Se ti servono delle note, inseriscile in un campo separato, oppure usa un formato pensato per i file di configurazione. - Le chiavi senza virgolette sono comuni nei letterali di oggetto JavaScript. Aggiungi le virgolette.
- NaN e undefined non fanno parte di JSON. Usa null per un valore mancante, o una stringa se il valore è testo.
Fai attenzione alla sostituzione globale alla cieca. Cambiare ogni apice singolo in virgolette doppie rompe qualsiasi stringa che contenga un apostrofo, come «Ada's notes». Controlla ogni corrispondenza in Trova e sostituisci prima di procedere, così vedi quali virgolette cambierebbero.
Correggi la struttura passo dopo passo
- Incolla il file in Formatta JSON. Formattarlo rende visibile la struttura, e l'errore mostra riga e colonna. Poi premi Ripara, che rimuove commenti e virgole finali. Non modifica gli apici singoli né le virgolette tipografiche, quindi correggili tu.
- Correggi solo il primo errore, poi ricontrolla. Un solo errore può produrne diversi più in basso.
- Verifica che ogni parentesi graffa o quadra di apertura abbia la sua chiusura, e che l'annidamento sia quello che intendi.
- Valida il file finale con il parser usato dalla tua applicazione, non solo con uno strumento web. I parser differiscono leggermente.
Un file che si analizza non è necessariamente quello che volevi. Verificalo con il Validatore JSON Schema per individuare un campo mancante o un valore del tipo sbagliato, oppure confronta due documenti JSON per vedere cosa è cambiato tra le versioni.
Casi limite
- Virgole finali nei file generati. Alcuni strumenti le scrivono. Se produci JSON costruendo stringhe a mano, usa il serializzatore del tuo linguaggio, che produce output valido.
- Chiavi duplicate. JSON le ammette, ma la maggior parte dei parser conserva solo l'ultimo valore. Le chiavi duplicate sono un bug che aspetta di manifestarsi.
- Numeri grandi. Gli interi molto grandi possono perdere precisione in alcuni parser, quindi conserva gli identificativi come stringhe se sono più lunghi di quanto il parser riesca a rappresentare esattamente. La guida da CSV a JSON fa lo stesso discorso sugli ID.
Risposte rapide
Perché il mio JSON non funziona se sembra corretto?
Le cause più comuni sono una virgola finale, apici singoli, un commento o virgolette tipografiche copiate da un documento. Controlla la posizione indicata nel messaggio di errore e il carattere che la precede.
Il JSON può contenere commenti?
No. Lo standard JSON non ammette commenti. Rimuovili, oppure sposta le note in un campo a parte. Il pulsante Ripara del formattatore li rimuove per te.
Cosa usare al posto di undefined in JSON?
Usa null quando un valore manca di proposito, oppure ometti del tutto la chiave. undefined è un valore di JavaScript e non ha una rappresentazione in JSON.
Tradotto dal Originale in inglese con l'assistenza dell'IA.
Commenti
Nessun commento per ora. Sii il primo.


