JSON vs JSON5 vs JSONC
In sintesi: Superset rigorosi in ordine: JSONC aggiunge i commenti; JSON5 aggiunge virgolette singole, chiavi senza virgolette, virgole finali e numeri esadecimali. Scegliere male rompe un'API, non il tuo editor.

In sintesi: usa JSON standard ogni volta che i dati attraversano il confine di un sistema, e usa JSONC solo per la configurazione locale che gli umani modificano; ricorri a JSON5 quando hai bisogno di virgolette singole, virgole finali o chiavi senza virgolette, ma conferma prima che il loader lo supporti.
In una riga: JSONC è JSON più i commenti; JSON5 è JSON più le abitudini JavaScript.
Matrice delle funzionalità
| Funzionalità | JSON | JSONC | JSON5 |
|---|---|---|---|
| Stringhe con virgolette doppie | ✅ | ✅ | ✅ |
| Stringhe con virgolette singole | ❌ | ❌ | ✅ |
| Chiavi senza virgolette | ❌ | ❌ | ✅ |
Commenti di riga // |
❌ | ✅ | ✅ |
Commenti a blocco /* */ |
❌ | ✅ | ✅ |
| Virgole finali | ❌ | ❌ | ✅ |
Numeri esadecimali 0xFF |
❌ | ❌ | ✅ |
Infinity / NaN |
❌ | ❌ | ✅ |
| Stringhe su più righe | ❌ | ❌ | ✅ |
| Leggibile dai parser standard | ✅ | ❌ | ❌ |
Nota che JSONC risolve solo i commenti. Molti assumono che "JSON che consente i commenti" consenta anche le virgole finali; tsconfig.json fallisce comunque su una di esse.
A cosa serve ciascuno
JSON — interscambio. API, code, colonne JSON dei database, log. Tutto ciò che è macchina-a-macchina.
JSONC — configurazione dell'editor. VS Code analizza questi file da sé, quindi JSON.parse non li vede mai. Non esiste un RFC; è una convenzione de facto guidata da Microsoft.
JSON5 — un superset indulgente per gli umani. L'obiettivo era "configurazione che sembra un letterale oggetto JavaScript". Il più adatto ai file .json5 caricati dagli strumenti di build; la sintassi più ampia e il supporto degli strumenti più stretto.
Scegliere
| Situazione | Scelta |
|---|---|
| Corpi di richiesta o risposta | JSON, nessuna alternativa |
| Colonne JSON in MySQL / PostgreSQL | JSON, le loro funzioni non accettano nient'altro |
| Configurazione di progetto che richiede spiegazioni | JSONC se supportato, altrimenti YAML |
| Vuoi la scioltezza in stile JS | JSON5, dopo aver confermato che il loader lo supporti |
| Lo modificheranno i non tecnici | YAML, l'indentazione batte le parentesi graffe |
Una trappola facile
Analizzare un file JSONC come JSON rigoroso produce un errore che punta al commento:
SyntaxError: Unexpected token / in JSON at position 42
Prima di eliminare il commento, controlla se il file è pensato per essere JSONC. Eliminalo e potresti comunque incontrare una virgola finale due righe dopo.
FAQ
Come devo scegliere tra JSONC e JSON5?
Usa JSONC quando i commenti sono l'unica cosa di cui hai bisogno: aggiunge // e /* */ sopra JSON, e settings.json e tsconfig.json di VS Code lo usano. Usa JSON5 quando vuoi anche virgolette singole, chiavi senza virgolette, virgole finali, numeri esadecimali o stringhe su più righe. Entrambi dipendono dal loader, quindi conferma che lo strumento che legge il file lo supporti.
Perché un file JSONC non può essere letto come JSON standard?
JSONC è una convenzione de facto, non un RFC separato, quindi i parser standard rifiutano i commenti. JSON.parse su tale file lancia Unexpected token /, puntando al commento invece che ai dati. Solo la configurazione letta da un editor o da un parser dedicato dovrebbe essere scritta come JSONC.
Devo inviare un file JSON5 a un'API?
No. API, colonne JSON dei database e code analizzano JSON rigoroso, quindi le virgolette singole, le chiavi senza virgolette e le virgole finali di JSON5 vengono rifiutate. JSON5 è per la configurazione locale che gli umani modificano; convertilo in JSON standard prima che attraversi il confine di un sistema.