Validatore JSON
Incolla il JSON e scopri se viene letto, e se no, esattamente dove si ferma.
} ^
Che cos'è un validatore JSON?
Un validatore JSON risponde a una domanda sola: questo testo è interpretabile come JSON? Se non lo è, indica riga e colonna in cui il parser si è fermato e che cosa si aspettava. Valido non vuol dire corretto: un validatore controlla la sintassi, mai se i valori hanno senso.
Come funziona
Il validatore passa il testo al parser JSON del browser, lo stesso che userà il tuo codice. Se il parser lo accetta, è JSON valido per definizione: non c’è un secondo parere da chiedere.
Quando fallisce, il parser indica la posizione del carattere in cui si è fermato. Quella posizione viene tradotta in riga e colonna, e la riga incriminata viene stampata con un accento circonflesso sotto la colonna, come fa un compilatore.
La posizione è dove il parser si è accorto del problema, quindi sempre all’errore o dopo. Una graffa di chiusura mancante viene segnalata alla fine del file, perché è lì che il parser ha finito il testo.
Che cosa significa davvero «JSON valido»
JSON è un formato piccolo, e la specifica (ECMA-404, e l’RFC 8259) sta in poche pagine. Un documento JSON valido è un solo valore: un oggetto, un array, una stringa, un numero, true, false o null. Tutto il resto è un errore di sintassi, e un validatore JSON risponde a questa unica domanda senza che tu debba eseguire il codice per scoprirlo.
La rigidità è voluta. JSON è stato fatto apposta più stretto degli oggetti JavaScript a cui somiglia, perché un parser in qualunque linguaggio accetti esattamente gli stessi documenti. È anche il motivo per cui un file che a occhio sembra perfetto, e che l’editor colora senza lamentarsi, può comunque essere rifiutato: le regole sono più strette di quanto sembrino.
Quello che JSON non ammette, e l’errore che produce
- I commenti né // né /* */. Le vittime abituali sono i file di configurazione; JSONC, JSON5 e i dialetti di alcuni strumenti li reintroducono, ma un parser JSON puro li rifiuta con «Unexpected token /».
- La virgola finale una virgola dopo l’ultimo elemento di un oggetto o di un array. È di gran lunga la causa più comune di JSON non valido, e nasce dalla modifica a mano. L’errore punta alla graffa o alla quadra di chiusura.
- Gli apici singoli 'nome' non è una stringa. Le stringhe JSON usano sempre i doppi apici, anche per le chiavi.
- Le chiavi senza virgolette {nome: "x"} è JavaScript valido e JSON non valido. Ogni chiave è una stringa tra virgolette.
- NaN, Infinity e undefined non esiste un modo di scriverli. Un serializzatore che emette NaN ha prodotto qualcosa che nessun parser JSON riuscirà a rileggere: usa null, o una stringa, o cambia la struttura del campo.
- Un a capo vero dentro una stringa un’interruzione di riga tra virgolette dev’essere l’escape \n. Il modo tipico in cui entra è incollare un valore su più righe da un terminale.
- Uno zero iniziale o un numero esadecimale 0x1F e 007 non sono numeri JSON. Scrivi 31 e 7.
Leggere la posizione che ti dà il parser
Riga e colonna indicano dove il parser si è fermato, non dove hai sbagliato. Le due cose coincidono per un carattere di troppo, e sono lontanissime per qualsiasi cosa non bilanciata: dimentica una graffa alla riga 12 di un file di 400 righe e l’errore arriva alla riga 400, perché il parser ha continuato tranquillo fino a esaurire il documento.
Quindi quando la posizione segnalata è proprio la fine del file, sospetta qualcosa di non chiuso più sopra: una graffa, una quadra, o una stringa a cui manca la virgoletta di chiusura. Quando la posizione è a metà, leggi i pochi caratteri immediatamente precedenti: è lì che comincia il token non valido. Un errore su una riga che sembra perfetta di solito significa che alla riga precedente manca la virgola.
Validatore o formattatore?
Sono lo stesso controllo visto da due lati, perché formattare richiede di analizzare. Usa il validatore quando ti servono solo il verdetto e la posizione: controllare un file di configurazione prima di un deploy, o accertarti che una risposta API sia ben formata prima di andare a cercare un bug nel tuo codice. Usa il formattatore JSON quando vuoi leggere il documento, indentarlo, ordinarne le chiavi o minificarlo.
Nessuno dei due valida rispetto a uno schema. «JSON valido» significa che la sintassi viene letta; non dice se il campo che ti serve c’è, se l’id è una stringa o un numero, o se la data è nel formato che l’altro sistema si aspetta. Quello è il compito di JSON Schema, ed è una domanda diversa e più grande.
Controllare un file che non dovresti caricare
L’analisi avviene nella pagina, nel tuo browser, con lo stesso motore che esegue il resto del sito. Non viene inviato niente da nessuna parte: la risposta API con dentro i dati di un cliente, il manifest Kubernetes con un riferimento a un secret, l’export di un database di produzione si possono controllare senza che nulla lasci il tuo computer, e lo strumento continua a funzionare anche senza rete.
Conta più di quanto sembri. Un validatore online che invia a un backend ha già ricevuto il tuo documento, e quello che registra se lo tiene. Per qualsiasi cosa provenga da un sistema di produzione, un controllo che avviene in locale non è una comodità: è l’unica versione dello strumento che puoi usare.
Domande frequenti
Il mio JSON viene inviato a un server?
No. L’analisi avviene nel browser con il suo motore JSON, quindi non viene caricato nulla e lo strumento funziona anche offline. Puoi incollare dati di produzione in sicurezza.
Perché l’errore punta all’ultima riga del file?
Perché qualcosa più sopra non è stato chiuso: di solito una graffa, una quadra o una stringa. Il parser ha continuato a leggere fino a esaurire il documento e ha segnalato il problema dove si è fermato, non dove sta l’errore.
Il JSON può contenere commenti?
No. Né // né /* */ sono ammessi, ed è il motivo per cui un file di configurazione modificato a mano fallisce così spesso. Formati come JSONC e JSON5 li reintroducono, ma un parser JSON puro li rifiuta.
JSON valido significa che i dati sono corretti?
No, significa che la sintassi viene letta. Se i campi obbligatori ci sono e se i tipi sono giusti è validazione di schema, un controllo diverso: lo strumento abituale è JSON Schema.