JSON Toolkit

Pourquoi une virgule finale casse JSON

L’essentiel : Les virgules finales sont légales dans les littéraux d'objet JavaScript et fatales en JSON. Voici l'erreur exacte, la grammaire RFC 8259 qui la cause, et trois corrections qui tiennent vraiment.

Débutant~3 min de lecturePublié le 2026-10-30Mis à jour le 2026-10-30
Pourquoi les virgules finales échouent en JSON et comment les corriger

L'essentiel : JSON interdit les virgules finales partout — quand un parseur échoue, supprimez la dernière virgule avec un formateur ; n'utilisez JSON5 ou JSONC que pour un parsing local indulgent, et émettez toujours du JSON standard vers les autres systèmes.

Parce que la grammaire le dit.

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

JSON.parse lève Unexpected token } in JSON at position 34. Node le formule différemment, mais chaque moteur pointe le même endroit : la virgule avant }.

Ce dont le parseur se plaint réellement

La production d'objet dans la RFC 8259 est :

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

Les crochets signifient facultatif, l'astérisque signifie zéro ou plus. En clair : les virgules séparent les membres, et le dernier membre est suivi directement de }.

Donc après une virgule le parseur est prêt pour un autre nom de membre. Il lit } et échoue. Les tableaux se comportent identiquement — [1, 2, 3,] échoue sur le ].

D'où vient l'habitude

Les littéraux d'objet JavaScript autorisent les virgules finales depuis ES5, tout comme les listes Python et les littéraux composites Go. Les éditeurs les ajoutent automatiquement. Puis quelqu'un copie un littéral d'objet d'un fichier .js dans un fichier .json et le fichier cesse de parser.

L'autre source courante est le JSON construit à la main : une boucle qui va jusqu'à i <= length laisse une virgule après le dernier élément.

Trois corrections

Retirez la virgule. Bien pour les modifications manuelles. Collez dans le formateur JSON et l'erreur est rapportée avec ligne et colonne, donc vous voyez exactement laquelle supprimer.

Parsez en JSON5. Les surensembles acceptent les virgules finales, ce qui convient à la configuration locale. Cela ne convient pas à tout ce que vous envoyez à un autre système — le récepteur le rejettera encore.

Arrêtez de concaténer des chaînes. Utilisez JSON.stringify, json.dumps, Jackson. Le sérialiseur gère correctement les séparateurs et résout l'échappement en même temps.

Liste d'audit rapide

Où Cause typique
Concaténation de boucle i <= length laisse une virgule en trop
Copier-coller Littéral d'objet soulevé d'un fichier JS
Gabarits Virgule codée en dur plus une boucle qui en ajoute une autre
Modification manuelle Dernier champ supprimé, sa virgule laissée derrière

FAQ

Pourquoi les virgules finales sont-elles légales en JavaScript mais pas en JSON ?

Les littéraux d'objet JavaScript les autorisent depuis ES5, tout comme les listes Python et les littéraux composites Go, ce qui explique pourquoi l'habitude suit les gens jusque dans JSON. La RFC 8259 ne permet des virgules qu'entre membres : le dernier membre est suivi directement de } ou ]. Copier un littéral d'objet d'un fichier .js dans un fichier .json est la source habituelle.

Faut-il parser en JSON5 pour accepter les virgules finales ?

Seulement pour la configuration locale. Les surensembles acceptent les virgules finales, mais tout ce que vous envoyez à un autre système est parsé comme du JSON strict et échouera encore. Générez du JSON standard à la frontière de sortie au lieu de compter sur l'indulgence du récepteur.

Où regarder d'abord après une erreur de virgule finale ?

Commencez par la position dans le message d'erreur : elle pointe généralement la virgule avant } ou ]. Vérifiez ensuite les trois sources habituelles : une boucle écrite avec i <= length, un littéral d'objet collé depuis un fichier JS, et un gabarit qui code en dur une virgule à côté d'une boucle. Coller dans un formateur rapporte la ligne et la colonne exactes.

Lectures complémentaires