JSON valido e leggibile

JSON è il formato con cui la maggior parte delle API web scambia dati: oggetti fra graffe con chiavi fra virgolette doppie, array fra quadre, stringhe, numeri, true, false e null. Le API spesso lo restituiscono minificato, su una sola riga: formattarlo con l'indentazione lo rende leggibile, minificarlo toglie gli spazi e riduce i byte.

La sintassi è più rigida di quella di JavaScript: niente virgole finali dopo l'ultimo elemento, niente commenti, niente apici singoli, chiavi sempre fra virgolette doppie. Sono gli errori più comuni quando si scrive JSON a mano, e il parser li segnala con la posizione esatta.

Ordinare le chiavi in ordine alfabetico non cambia il significato, perché in un oggetto JSON l'ordine delle chiavi non conta, ma rende molto più facile confrontare due risposte o due file di configurazione con un diff.

Errori frequenti

  • Lasciare una virgola dopo l'ultimo elemento di un oggetto o di un array: JSON non la accetta.
  • Usare apici singoli o chiavi senza virgolette, come in JavaScript: in JSON servono le virgolette doppie.
  • Scrivere NaN, Infinity o undefined: non sono valori JSON; si usa null.

Domande frequenti

Il JSON che incollo viene inviato a un server?

No: la formattazione e la validazione avvengono nel browser con JSON.parse. Solo i JSON brevi finiscono nell'indirizzo della pagina, per poterla condividere.

Perché i numeri molto grandi cambiano?

JSON.parse usa i numeri a virgola mobile di JavaScript, precisi fino a 2⁵³: un ID come 12345678901234567890 viene arrotondato. Le API che usano ID grandi di solito li inviano come stringhe.

Che differenza c'è fra JSON e JSON5?

JSON5 è un'estensione che ammette commenti, virgole finali e apici singoli; comodo per i file di configurazione, ma non è JSON standard e JSON.parse lo rifiuta.

Come funziona questo calcolo

Il testo viene letto con JSON.parse, che applica la grammatica di RFC 8259; in caso di errore la posizione riportata dal browser viene convertita in riga e colonna. Il risultato è riscritto con JSON.stringify, con 2 o 4 spazi o una tabulazione per livello, oppure senza spazi. Con l'ordinamento, le chiavi di ogni oggetto sono ordinate ricorsivamente per codice Unicode. Le dimensioni sono in byte UTF-8.