Erreurs JSON courantes et comment les corriger

Mis à jour :

Le JSON est le format qu’utilisent de nombreuses API, fichiers de configuration et applications web pour échanger des données, et sa grammaire tient sur une seule page. C’est aussi pourquoi il ne pardonne rien : un texte est du JSON valide ou ne l’est pas, et une seule virgule de trop suffit pour qu’un analyseur (parser) rejette l’ensemble. La plupart des erreurs viennent des mêmes quelques habitudes, dont beaucoup sont héritées de JavaScript ou d’autres langages. Ce guide présente les règles, les erreurs qui les enfreignent le plus souvent, la façon de lire le message d’erreur, et quelques cas qui sont du JSON valide mais posent tout de même problème.

Les vraies règles du JSON

Les définitions actuelles sont la RFC 8259, publiée en décembre 2017, et ECMA-404. Elles décrivent la même syntaxe :

Entre les éléments syntaxiques, seuls quatre caractères d’espacement sont autorisés : l’espace, la tabulation, le saut de ligne et le retour chariot.

Les erreurs les plus courantes

Chacune d’elles est rejetée par un analyseur standard. La correction figure dans la description.

Formateur et convertisseur JSON

Lire le message d’erreur

Un analyseur lit le texte de gauche à droite et s’arrête au premier caractère qu’il ne peut pas accepter : la position indiquée dans le message d’erreur est donc l’endroit où il a abandonné, souvent juste après l’erreur réelle. Avec une virgule finale, l’analyseur signale l’accolade fermante, car après une virgule il attend un autre nom de propriété. S’il manque une accolade ou un crochet, l’erreur peut apparaître tout à la fin du texte, loin de l’endroit où le caractère manquant aurait dû se trouver.

La formulation varie selon les navigateurs et les langages, et beaucoup de messages indiquent une position, mais pas tous, soit sous forme de nombre de caractères depuis le début, soit sous forme de ligne et de colonne. Par exemple, le moteur JavaScript de Chrome signale {"name":"Ana",} ainsi :

Lorsque la position n’est pas évidente, regardez le caractère juste avant, et vérifiez que chaque accolade, crochet ou guillemet ouvert avant ce point a bien son pendant. Un éditeur qui met en évidence les accolades et crochets correspondants permet souvent de repérer facilement celui qui manque.

Du JSON valide qui pose tout de même problème

Le JSON n’est pas du JavaScript

La syntaxe du JSON est tirée des littéraux d’objet JavaScript, ce qui explique qu’on les confonde si facilement. Un littéral d’objet JavaScript accepte les guillemets simples, les noms sans guillemets, les virgules finales, les commentaires et des valeurs comme undefined ; le JSON n’accepte rien de tout cela. Un code qui fonctionne une fois collé dans un script peut donc échouer en tant que fichier JSON.

Certains outils acceptent des formats étendus comme JSON5, ou le « JSON avec commentaires » des fichiers de configuration. Ils sont pratiques là où ils sont pris en charge, mais ce n’est pas du JSON, et un analyseur standard, y compris le formateur nTools, les rejettera.

Questions fréquentes

Le JSON peut-il contenir des commentaires ?

Non. La spécification ne prévoit aucune syntaxe de commentaire. Si vous avez besoin de notes dans les données, placez-les dans une propriété comme "_comment", ou utilisez un format qui autorise les commentaires là où les outils le prennent en charge.

Pourquoi mon JSON fonctionne-t-il en JavaScript mais échoue-t-il dans un validateur ?

Parce qu’un littéral d’objet JavaScript autorise des choses que le JSON n’autorise pas, comme les guillemets simples, les virgules finales et les noms sans guillemets. Collé dans du code, il s’exécute ; enregistré en tant que JSON, il est invalide.

Comment conserver exactement un très grand nombre ?

Envoyez-le sous forme de chaîne, par exemple "9007199254740993", et convertissez-le à la réception avec un type capable de le contenir, comme BigInt en JavaScript.

Le formateur nTools envoie-t-il mon JSON quelque part ?

Non. Il est analysé et mis en forme dans votre navigateur, et lorsque le navigateur indique une position, le formateur l’affiche sous forme de ligne et de colonne.

Guides associés