Che cos'è un JSON valido
JSON (JavaScript Object Notation, RFC 8259) è un formato di testo con poche regole rigide. Un documento è formato da un solo valore: un oggetto come {"nome": "Anna"}, un array come [1, 2, 3], una stringa, un numero oppure una delle parole true, false e null. Oggetti e array si possono annidare a piacere.
- Stringhe e chiavi stanno sempre tra virgolette doppie. I caratteri speciali si scrivono con il backslash (
\n,\",\\,\u00e4); un a capo grezzo dentro una stringa è vietato. - Le voci sono separate da virgole, senza virgola dopo l'ultima. Tra chiave e valore c'è il simbolo due punti.
- I numeri sono decimali, senza zero iniziale, senza
+davanti, senzaNaNeInfinity; frazioni ed esponenti vanno bene (-1.5e3). - I commenti non esistono. Contano come spazio solo lo spazio, la tabulazione e l'a capo. La codifica è UTF-8, meglio senza BOM.
Il formattatore qui sopra trasforma una riga lunga in testo leggibile (2 o 4 spazi, oppure tabulazione), minimizza il JSON per la trasmissione e, se vuoi, ordina tutte le chiavi in modo ricorsivo per valore del carattere (le maiuscole prima delle minuscole). Gli array mantengono il loro ordine, perché ha un significato. Numeri e stringhe vengono stampati esattamente come li hai scritti.
Gli errori più frequenti
- Virgola finale:
{"a": 1,}oppure[1, 2,]. In JavaScript è permessa, in JSON no. - Apici singoli:
{'a': 'b'}. Devono essere virgolette doppie, anche per le stringhe. - Chiavi senza virgolette:
{a: 1}. Così appare un oggetto JavaScript o Python stampato in console, ma non è JSON. - Commenti con
//o/* */. I file di configurazione in formato JSONC li ammettono, i normali parser JSON no. - NaN, undefined, Infinity e i valori Python
True,False,None. JSON conosce solotrue,falseenull. - Virgola mancante tra due voci, spesso dopo aver incollato o cancellato una riga. Il messaggio indica il punto in cui il parser inciampa; la causa sta di solito subito prima.
- A capo o tabulazione dentro una stringa: vanno scritti come
\no\t. - BOM: un carattere invisibile all'inizio del file che alcuni editor (soprattutto su Windows) salvano insieme al testo.
Per i primi quattro errori può aiutare Prova a riparare. Rimuove commenti e virgole in eccesso, trasforma gli apici singoli in virgolette doppie, mette le chiavi tra virgolette ed elenca ogni modifica. Tutto il resto, ad esempio una virgola mancante, lo decidi tu: lo strumento altrimenti andrebbe a indovinare i tuoi dati.
JSON non è un oggetto JavaScript, e i numeri grandi
JSON somiglia a un oggetto letterale JavaScript, ma ne è solo un sottoinsieme rigoroso. Un oggetto nel codice può contenere chiavi senza virgolette, apici singoli, commenti e una virgola finale, oltre a undefined, funzioni e NaN. JSON.stringify omette undefined e le funzioni negli oggetti, trasforma NaN e Infinity in null, scrive un Date come stringa e va in errore con un BigInt. Un oggetto copiato dalla console, quindi, non è ancora JSON.
Numeri grandi: JSON in sé non pone limiti, ma JavaScript legge ogni numero come virgola mobile a 64 bit. Gli interi sono esatti solo fino a 253 − 1 = 9007199254740991. Oltre vengono arrotondati: 9007199254740993 diventa 9007199254740992, senza alcun errore. Colpisce soprattutto gli ID a 64 bit (ad esempio gli ID Snowflake), i contatori grandi e i timestamp in nanosecondi. Lo strumento avvisa quando trova numeri così nel testo e li lascia invariati durante la formattazione. Se altri programmi leggono il JSON, invia questi valori come stringhe ("id": "9007199254740993").
Un altro dettaglio: le chiavi duplicate in un oggetto sono formalmente ammesse ma inaffidabili, perché JSON.parse tiene solo l'ultimo valore. Lo strumento le segnala.
Domande e risposte
Il mio JSON viene caricato su un server? No. Tutto gira nel tuo browser, anche il caricamento di un file; non parte nessuna richiesta di rete e non viene salvato nulla.
Perché l'errore indica un punto diverso da quello che mi aspettavo? Il parser segnala il punto in cui si accorge che qualcosa non va. Con una virgola o una parentesi mancante la causa sta spesso una riga più in alto. Controlla anche la riga precedente.
Perché 1.0 o 1e3 restano invariati quando formatto? Perché lo strumento non riscrive i numeri. Così non si perde precisione, nemmeno con valori molto grandi.
Posso controllare JSON con commenti (JSONC) o JSON5? Non contano come JSON valido. Con «Prova a riparare» rimuovi commenti e virgole finali; JSON5 con le sue altre estensioni è coperto solo in parte.
E i file con un oggetto per riga (JSON Lines, NDJSON)? Sono più documenti. Controlla ogni riga separatamente, altrimenti lo strumento segnala altro testo dopo la fine.
Quanto può essere grande il JSON? Un file caricato può arrivare a 5 MB; nel campo di testo puoi incollare di più, ma il browser rallenta.
Privacy
Gira interamente nel tuo browser; non viene inviato né salvato nulla.