Correggere le virgole finali nel JSON

Una virgola finale dopo l’ultima proprietà di un oggetto o l’ultimo elemento di un array è valida in alcuni contesti JavaScript, ma non in JSON.

Perché capita l’errore

I letterali di oggetto JavaScript spesso ammettono una virgola finale, ma JSON richiede che l’ultimo elemento sia seguito direttamente dalla parentesi di chiusura.

Esempio errato

{ "name": "Ada", "active": true, }

JSON corretto

{ "name": "Ada", "active": true }

Da dove arrivano le virgole finali

Per lo più compaiono quando qualcuno edita a mano una configurazione, commenta l’ultimo elemento o incolla da codice JavaScript o TypeScript. Anche template engine e generatori di codice le producono se un ciclo aggiunge una virgola dopo ogni elemento senza tenere conto dell’ultimo indice.

Perché alcuni parser le accettano e JSON no

Letterali di oggetto JavaScript, JSON5, JSONC, YAML e gran parte delle sintassi di letterali in altri linguaggi accettano la virgola finale perché rende più puliti i diff. JSON nella RFC 8259 deliberatamente non lo fa — parser severi come JSON.parse, encoding/json di Go o il modulo json di Python la rifiutano.

Rilevare le virgole finali prima della produzione

In CI, fai il lint dei file di configurazione con un parser JSON severo (jq, python -m json.tool o node -e 'JSON.parse(...)'). Nei repository TypeScript imposta "trailingComma": "none" in Prettier per i .json, così il formatter non ne aggiunge.

Quando la virgola finale non è il vero bug

Se un payload arriva da una API o da una libreria che produce JSON e contiene una virgola finale, il problema è nella serializzazione a monte, non nel consumatore. Correggere la virgola localmente nasconde un bug del producer che ritornerà alla prossima chiamata — sistema il producer.

FAQ

D: JSON.parse accetterà mai le virgole finali? R: No — il modo strict è lo standard. D: JSON5 è un sostituto sicuro? R: Solo per configurazioni editate a mano; mai per protocolli di rete. D: Lo strumento di auto-repair può rimuovere solo le virgole finali? R: Sì, incolla il JSON e le toglie insieme ad altri errori di sintassi comuni.