ToolZen ToolZen
Developer formatter client

JSON Formatter

Format, validate, and minify JSON data directly in your browser. Includes collapsible tree view with syntax highlighting.

Advertisement (Top Banner)
Indentation
Bracket style

Advertisement (Bottom)

JSON est un format strict qui a l'air indulgent, et c'est pour cela qu'on y perd tant de temps. Un formateur fait deux choses : il rend lisible un mur de texte minifié, et il vous dit précisément où l'analyseur a abandonné. C'est généralement la seconde qui vous amène ici.

Les quatre choses que JSON n'autorise pas

La plupart des échecs d'analyse sont l'une des quatre mêmes erreurs, toutes parfaitement légales en JavaScript et interdites en JSON. La virgule après le dernier élément. Les apostrophes au lieu des guillemets doubles. Les clés sans guillemets : {name: "x"} est un littéral d'objet JavaScript, pas du JSON. Et les commentaires, que le format n'a jamais pris en charge à aucun moment de son existence.

Ce dernier point piège ceux qui configurent des outils. Si un fichier de configuration accepte les commentaires, ce n'est pas du JSON : c'est du JSON5 ou du JSONC, des formats identiques à l'œil jusqu'à ce qu'un analyseur strict refuse de les lire. Les valeurs NaN et Infinity sont exclues elles aussi, ce qui explique que sérialiser le résultat d'une division puisse produire quelque chose qu'aucun analyseur ne reprendra.

Formater peut réordonner vos clés en silence

Cela surprend, et mieux vaut le savoir avant de recoller un fichier en production. Tout outil qui formate du JSON l'analyse en mémoire puis le resérialise. Pour les clés textuelles ordinaires, cet aller-retour préserve l'ordre d'insertion et rien ne bouge. Mais les clés qui ressemblent à des entiers positifs sont un cas à part : JavaScript les énumère en premier, par ordre numérique croissant, quelle que soit leur place dans votre fichier.

Ainsi {"10":"a","2":"b","name":"c"} revient sous la forme {"2":"b","10":"a","name":"c"}. Les données sont identiques et tous les analyseurs seront d'accord, mais un diff ligne à ligne s'allumera entièrement. Si vous formatez un fichier versionné et indexé par identifiants numériques, attendez-vous à ce bruit.

Les grands entiers perdent en précision, sans le dire

Celui-ci provoque de vrais bugs en production. JSON n'a pas de type entier : il a des nombres, et JavaScript représente chaque nombre comme un flottant 64 bits. Cela ne donne des entiers exacts que jusqu'à 9007199254740991, soit 2^53−1. Au-delà, les valeurs sont silencieusement arrondies au plus proche représentable.

Collez {"id":9007199254740993} dans n'importe quel outil JSON fonctionnant dans le navigateur et il vous rendra 9007199254740992. Aucune erreur. Aucun avertissement. L'identifiant est simplement faux désormais. C'est pourquoi les API manipulant de grands identifiants — Twitter/X, Discord, les identifiants snowflake des bases de données — les envoient sous forme de chaînes. Si votre JSON contient de tels identifiants en nombres bruts, ne le faites transiter par aucun outil JavaScript, celui-ci compris.

Minifier vaut moins que vous ne le pensez

Retirer les espaces d'un JSON réduit généralement de 10 à 20 % la taille brute, ce qui semble utile jusqu'à ce qu'on se rappelle que votre serveur le sert presque certainement compressé en gzip ou brotli. Les algorithmes de compression sont excellents face aux espaces répétitifs : pour eux, c'est quasiment gratuit. Après compression, l'écart entre JSON formaté et minifié se réduit souvent à quelques pour cent.

Minifiez quand vous glissez du JSON dans une URL, un attribut data, ou tout endroit où il ne sera pas compressé. Pour une réponse d'API en HTTP, la lisibilité dans l'onglet réseau vaut généralement plus que les octets.

Questions fréquentes

Mon JSON est-il envoyé à un serveur ?

Non. Cet outil porte la mention « client » : l'analyse et le formatage s'exécutent dans votre onglet, et le texte ne quitte jamais votre machine. Cela dit, le JSON copié depuis un vrai système contient souvent des jetons, des fiches clients ou des identifiants internes — si c'est votre cas, utilisez un éditeur contrôlé par votre organisation plutôt qu'une page web gratuite quelconque, celle-ci comprise.

L'erreur indique « position 1247 » — comment la trouver ?

Ce nombre est un décalage en caractères depuis le début de l'entrée, pas un numéro de ligne, ce qui le rend malcommode à la main. Formatez d'abord le document : une fois indenté, l'analyseur signale l'échec sur une structure lisible et la ligne fautive saute généralement aux yeux. Bon à savoir également : la position signalée est celle où l'analyseur a remarqué le problème, pas toujours celle où vous l'avez commis — une accolade fermante manquante est souvent signalée bien en dessous de la ligne réellement fautive.

Le formatage modifie-t-il mes données ?

Presque jamais, mais ce « presque » cache deux cas. Les clés d'apparence numérique sont réordonnées, et les entiers au-delà de 2^53−1 perdent en précision — les deux sont expliqués plus haut. Tout le reste revient identique quant au sens, même si les espaces diffèrent.

Puis-je utiliser des commentaires dans un fichier de configuration JSON ?

Pas en JSON à proprement parler. Si votre outil les accepte, il lit du JSONC ou du JSON5, ou bien il retire les commentaires avant l'analyse. Beaucoup d'éditeurs vous laissent volontiers les écrire, puis un analyseur strict en aval rejette le fichier : un échec déroutant à diagnostiquer. Si vous devez annoter un document JSON sans pouvoir changer de format, le contournement habituel est une clé sœur du type « _comment ».

Que se passe-t-il avec les clés en double ?

La spécification dit que les noms « devraient » être uniques mais n'interdit pas les répétitions : le comportement dépend donc de l'analyseur. En pratique, JavaScript retient la dernière occurrence et écarte les précédentes sans le moindre avertissement. Si un document contient des doublons, le formater ici les réduira à un seul — une modification que vous ne souhaitez peut-être pas, vérifiez donc avant de recoller le résultat.