Français

Outils de développement · JSON formateur et validateur

Pourquoi une virgule finale se termine JSON et où pointe le validateur

· Comment ça marche

json flux de travail du développeur validation

Pourquoi une virgule finale s'arrête JSON et où les points du validateur sont illustrés avec des jetons JSON et une limite de validation précise
Illustration vectorielle originale de ToolAcre

La virgule de fin est l'erreur JSON la plus courante, et l'erreur n'atteint jamais la virgule elle-même. Apprenez ce que la grammaire attend après une virgule et comment lire la position signalée.

Le bug à un caractère qui prend dix minutes à trouver

Le bug d'un caractère qui prend dix minutes à trouver : une configuration modifiée à la main, une virgule laissée après la dernière propriété et une construction qui échoue. Un analyseur strict suit la séquence de jetons réellement présente dans le document. Considérons un objet se terminant par `'enabled': true,` et un tableau se terminant par `'blue',` : les deux séparateurs promettent un autre élément même si le jeton suivant ferme le conteneur.

ToolAcre ne dérive pas d'emplacement du message du moteur de navigateur. JSON.parse décide d'abord de la validité ; ce n'est qu'après un échec que l'analyseur du référentiel parcourt le texte et signale le premier caractère inacceptable. Pour une virgule de fin, ce caractère est l'accolade ou le crochet fermant, et la raison indique explicitement « Virgule de fin ». Dans un objet, un autre nom de membre cité est manquant ; dans un tableau, il manque une autre valeur complète.

Ce que dit la grammaire JSON après une virgule

Ce que dit la grammaire JSON après une virgule — La RFC 8259 utilise des virgules pour séparer les valeurs dans les tableaux et les membres dans les objets. Un séparateur a donc besoin d'un élément valide de chaque côté. Après une virgule d'objet, l'analyseur attend un nom entre guillemets, deux points et une valeur. Après une virgule de tableau, il attend toute valeur JSON valide. Un délimiteur fermant ne satisfait aucune des deux productions.

Le séparateur appartient entre deux membres ou éléments, jamais après le dernier. La suppression de la dernière virgule ne change aucune valeur ni aucun ordre ; il restaure la grammaire qui ferme le conteneur directement après sa valeur finale. C'est aussi pourquoi une virgule peut apparaître sans problème après chaque élément précédent : chacune de ces virgules est suivie de l'élément suivant qu'elle promet.

Pourquoi l'erreur atterrit sur la parenthèse fermante

Pourquoi l'erreur atterrit sur la parenthèse fermante : une virgule est légale au milieu d'un conteneur, donc l'analyseur ne peut pas la rejeter simplement à vue. Il consomme le séparateur et change d'état pour attendre un autre nom ou une autre valeur. La contradiction ne devient certaine que lorsque `}` ou `]` arrive à la place. Ce délimiteur est l'endroit où l'élément promis s'avère absent, même si la virgule précédente a provoqué la transition d'état.

Le délimiteur signalé est donc une preuve de l'état de l'analyseur, et non une suggestion de suppression de l'accolade ou du crochet. Lisez un jeton à gauche. Si ce jeton est une virgule et que le délimiteur ferme le même conteneur, supprimez la virgule et conservez la fermeture. Le scanner de ToolAcre nomme la condition de virgule finale et fournit la position source après que JSON.parse rejette le document.

JavaScript, Python et les linters modernes le permettent, JSON ne le permet pas

JavaScript, Python et les linters modernes le permettent, JSON ne le permet pas - les littéraux du langage source autorisent souvent une virgule après le dernier élément car cela facilite la révision des lignes réorganisées et des ajouts futurs. Les formateurs peuvent même insérer ou conserver ce style. Ces commodités appartiennent à chaque grammaire de langue. Un littéral d'objet `.js` ou un dictionnaire Python peut être une source valide tandis que la même ponctuation visible reste invalide dans un document RFC 8259 JSON.

Un éditeur configuré pour JavaScript peut par conséquent n'afficher aucun avertissement lorsqu'un fragment collé se termine par une virgule. L'analyseur de destination contrôle toujours l'acceptation. Utilisez un mode linguistique JSON pour le texte `.json` et validez la charge utile exacte envoyée à une API ou à un champ de configuration. La clémence dans un fichier source, un linter ou un analyseur JSON5 ne constitue pas une preuve transférable concernant un consommateur JSON strict.

Exemple concret : trois virgules de fin dans un fichier

Exemple pratique : trois virgules de fin dans un fichier – supposons que `features` se termine par `"beta",`, que son objet conteneur se termine par `"enabled": true,` et qu'un deuxième membre racine a la même erreur. La première validation s'arrête à la parenthèse fermante après `beta`. La suppression de cette virgule permet à l'analyse de continuer jusqu'à l'accolade fermante après `true`, et la réparation du deuxième emplacement révèle l'erreur d'objet restante au niveau racine.

Cette séquence est attendue car les analyseurs signalent généralement le premier point où la continuation est impossible, et non tous les défauts ultérieurs. Mappez chaque ligne et colonne sur son délimiteur de fermeture, inspectez le séparateur juste avant, effectuez une modification intentionnelle et exécutez à nouveau la validation. Ne supprimez pas toutes les virgules en masse : des séparateurs entre les voisins réels sont requis. Une validation répétée distingue les trois virgules terminales non valides des virgules valides dans tout le même document.

Variantes qui produisent la même erreur

Les variantes qui produisent des erreurs de séparateur associées : une virgule de début, deux virgules d'affilée et une virgule après la valeur racine utilisent toutes à mauvais escient le même caractère mais violent différents états de l'analyseur. Une virgule de début n'a aucun élément terminé à sa gauche. Les virgules consécutives ne fournissent aucun élément entre les séparateurs. Une virgule après la valeur racine complète apparaît une fois que le texte JSON a déjà atteint une fin valide.

Ces cas ne doivent pas automatiquement être étiquetés par des virgules de fin. La raison précise dépend de la position et de l'état du conteneur. À l’intérieur de `{"a":1,,"b":2}`, la deuxième virgule est inattendue là où le nom d’un membre cité doit commencer. Dans `[ ,1]`, la première virgule apparaît là où une valeur est requise. Inspectez le diagnostic et les jetons environnants plutôt que d’appliquer une règle universelle « supprimer la virgule précédente » en dehors du modèle de délimiteur fermant.

Ce que cela ne couvre pas

Ce que cela ne couvre pas : JSON5 et certains workflows JSON-with-comments autorisent délibérément les virgules de fin. Un fichier écrit pour l'une de ces grammaires doit utiliser son analyseur, son extension et ses outils déclarés. Le traiter comme JSON strict produira des erreurs qui reflètent une incompatibilité de format, pas nécessairement une erreur de création. À l’inverse, l’accepter avec un analyseur permissif ne garantit pas que la source puisse être envoyée en toute sécurité à un point de terminaison JSON strict.

Changer les analyseurs simplement pour faire taire ce diagnostic modifie le langage accepté et peut masquer une incompatibilité avec le consommateur éventuel. Des commentaires, des noms sans guillemets et des chaînes entre guillemets simples peuvent accompagner des virgules de fin dans des formats étendus, créant ainsi des échecs supplémentaires lorsque le texte franchit la limite. Confirmez d'abord le contrat de destination. S'il indique JSON, supprimez la syntaxe de l'extension ; s'il indique JSON5 ou JSONC, validez avec un outil qui implémente ce format exact.

À retenir : regardez un jeton à gauche de la position signalée

À retenir : regardez un jeton à gauche de la position signalée – lorsque le curseur se trouve sous `}` ou `]`, la virgule précédente peut avoir promis un membre ou un élément qui n'est jamais arrivé. Conservez le délimiteur de fermeture structurellement nécessaire et supprimez uniquement ce séparateur de borne. Validez ensuite à nouveau l'ensemble du document, car le premier emplacement réparé peut découvrir une autre virgule de fin dans un conteneur ultérieur.

ToolAcre limite les responsabilités : JSON.parse décide que le document n'est pas valide et le scanner local fournit une raison structurelle stable ainsi qu'une ligne et une colonne après l'échec. Utilisez ces coordonnées pour inspecter le contexte de l'analyseur plutôt que de blâmer le caractère en surbrillance de manière isolée. Une virgule de fin est une modification d'un caractère, mais comprendre pourquoi l'erreur apparaît sur le délimiteur suivant rend le même diagnostic fiable sur les objets, les tableaux et les configurations profondément imbriquées.