JSON Toolkit

Perché una virgola finale rompe JSON

In sintesi: Le virgole finali sono legali nei letterali oggetto JavaScript e fatali in JSON. Ecco l'errore esatto, la grammatica di RFC 8259 che lo causa e tre correzioni che reggono davvero.

Principiante~3 min di letturaPubblicato il 2026-10-30Aggiornato il 2026-10-30
Perché le virgole finali falliscono in JSON e come correggerle

In sintesi: JSON vieta le virgole finali ovunque — quando un parser fallisce, elimina l'ultima virgola con un formattatore; usa JSON5 o JSONC solo per il parsing locale indulgente, ed emetti sempre JSON standard verso gli altri sistemi.

Perché lo dice la grammatica.

{
  "name": "demo",
  "size": 12,
}

JSON.parse lancia Unexpected token } in JSON at position 34. Node lo formula diversamente, ma ogni motore indica lo stesso punto: la virgola prima di }.

Di cosa si sta lamentando davvero il parser

La produzione degli oggetti in RFC 8259 è:

object = begin-object [ member *( value-separator member ) ] end-object

Le parentesi quadre indicano che è opzionale, l'asterisco indica zero o più. In termini semplici: le virgole separano i membri, e l'ultimo membro è seguito direttamente da }.

Quindi dopo una virgola il parser è pronto per un altro nome di membro. Legge } e fallisce. Gli array si comportano allo stesso modo — [1, 2, 3,] fallisce alla ].

Da dove viene l'abitudine

I letterali oggetto JavaScript ammettono le virgole finali dal ES5, così come le liste Python e i letterali compositi di Go. Gli editor le aggiungono automaticamente. Poi qualcuno copia un letterale oggetto da un file .js in un file .json e il file smette di essere analizzato.

L'altra fonte comune è JSON costruito a mano: un ciclo che esegue i <= length lascia una virgola dopo l'elemento finale.

Tre correzioni

Rimuovi la virgola. Va bene per le modifiche manuali. Incolla nel formattatore JSON e l'errore viene riportato con riga e colonna, così vedi esattamente quale eliminare.

Analizza come JSON5. I superset accettano le virgole finali, il che va bene per la configurazione locale. Non va bene per nulla che invii a un altro sistema — il destinatario lo rifiuterà comunque.

Smetti di concatenare stringhe. Usa JSON.stringify, json.dumps, Jackson. Il serializzatore gestisce correttamente i separatori e risolve nello stesso tempo anche l'escaping.

Lista di controllo rapida

Dove Causa tipica
Concatenazione in un ciclo i <= length lascia una virgola in più
Copia-incolla Letterale oggetto prelevato da un file JS
Template Virgola codificata a mano più un ciclo che ne aggiunge un'altra
Modifica manuale Ultimo campo eliminato, la sua virgola lasciata indietro

FAQ

Perché le virgole finali sono legali in JavaScript ma non in JSON?

I letterali oggetto JavaScript le ammettono dal ES5, e così fanno le liste Python e i letterali compositi di Go, ed è per questo che l'abitudine segue le persone in JSON. RFC 8259 consente le virgole solo tra i membri: l'ultimo membro è seguito direttamente da } o ]. Copiare un letterale oggetto da un file .js in un file .json è la fonte usuale.

Devo analizzare come JSON5 per accettare le virgole finali?

Solo per la configurazione locale. I superset accettano le virgole finali, ma qualsiasi cosa invii a un altro sistema viene analizzata come JSON rigoroso e fallirà comunque. Genera JSON standard al confine di output invece di affidarti all'indulgenza del destinatario.

Dove devo guardare per primo dopo un errore di virgola finale?

Parti dalla posizione nel messaggio di errore: di solito indica la virgola prima di } o ]. Poi controlla le tre fonti usuali: un ciclo scritto con i <= length, un letterale oggetto incollato da un file JS e un template che codifica a mano una virgola accanto a un ciclo. Incollare in un formattatore riporta la riga e la colonna esatte.

Ulteriori letture