Vous avez probablement déjà connu ce moment : vous ajoutez un // commentaire temporaire à votre fichier de configuration, et le JSON.parse du navigateur vous renvoie Unexpected token /. Ce n’est pas un bug de JSON, c’est en réalité de la syntaxe JSON5, et les navigateurs ne comprennent que le JSON strict. Cet article passe en revue les différences fondamentales entre JSON et JSON5, et explique comment le formateur JSON de Piick utilise un mode tolérant pour faire fonctionner les deux formats.
Quelle est exactement la différence entre JSON et JSON5 ?
JSON est un sous-ensemble de JSON5. JSON5 relâche 6 règles par rapport au JSON standard :
- Les commentaires d’une ligne
//et les commentaires de bloc/* */sont autorisés - Les chaînes peuvent utiliser des apostrophes, pas seulement des guillemets
- Les objets et les tableaux peuvent avoir une virgule de fin
- Les clés peuvent ne pas être entre guillemets (à condition d’être des identifiants valides)
- Les nombres acceptent l’hexadécimal (
0x1A),InfinityetNaN - Les chaînes peuvent s’étendre sur plusieurs lignes (les séparateurs de ligne sont insérés comme sauts de ligne)
Le JSON standard refuse tout cela. L’ensemble de règles a été proposé à l’origine par Douglas Crockford, le créateur de JSON, puis formalisé en tant que standard JSON5. Mais aujourd’hui, le JSON.parse natif du navigateur n’accepte toujours que du JSON strict : la spécification a évolué, mais les moteurs, eux, n’ont pas bougé.
Quels problèmes concrets JSON5 résout-il ?
Les deux principaux points de friction sont les commentaires et les virgules de fin. Les fichiers de configuration ont besoin de quelques lignes de commentaires pour expliquer la signification des champs ; le JSON standard les interdit. Avec les diffs Git, ajouter ou retirer une virgule de fin fait bouger tout le bloc (chaque nouvelle entrée modifie deux lignes). Le package.json n’utilise pas directement JSON5, car la chaîne d’outils npm n’accepte que du JSON strict. Mais vos propres fichiers de configuration, vos données fictives et vos brouillons peuvent tout à fait utiliser JSON5 ; il suffit de reconvertir en JSON strict à la fin, à l’aide d’un outil.
Pourquoi le JSON.parse natif du navigateur ne suffit-il pas ?
JSON.parse() ne comprend que du JSON conforme à la spécification. Les commentaires, les apostrophes et les virgules de fin déclenchent immédiatement une SyntaxError, et le message d’erreur se contente d’afficher Unexpected token sans préciser la ligne ni la colonne. Débugger revient alors à faire une recherche par dichotomie. Dans le formateur JSON de Piick, activez le bouton de mode tolérant et l’outil supprimera automatiquement les commentaires, convertira les apostrophes en guillemets et retirera les virgules de fin avant de formater le tout en JSON standard.
Comment Piick utilise le mode tolérant pour couvrir les deux mondes
L’intégralité du pipeline s’exécute localement dans votre navigateur : vos données ne quittent jamais votre appareil.
- Collez votre chaîne JSON5 dans la zone de saisie.
- Activez le mode tolérant.
- Cliquez sur « Formater » : l’outil commence par convertir le JSON5 en JSON standard, puis produit un résultat avec une indentation de 2 espaces, 4 espaces, tabulation, ou minifiée.
- Les erreurs affichent la ligne et la colonne exactes ; plus besoin de recherche par dichotomie.
- Copiez le résultat en un clic et collez-le dans n’importe quel analyseur JSON strict.
En résumé : le mode tolérant vous permet d’écrire à la manière JSON5, livrer à la manière JSON : tout le monde est content. La prochaine fois que vous rédigerez des données fictives, vous n’aurez plus à vous battre avec les virgules de fin.
Ouvrez dès maintenant le formateur JSON de Piick et essayez le mode tolérant. Collez directement un brouillon JSON5 et observez le résultat.