Formater du JSON, c'est ajouter les retours à la ligne et l'indentation que la machine n'a pas pris la peine de mettre, pour qu'une ligne de 40 000 caractères prenne une forme visible. Tous les éditeurs et la plupart des terminaux savent le faire en une commande. Les seules vraies décisions : de combien indenter, et s'il faut coller les données dans un site web pour y arriver.
La réponse rapide
- Dans un terminal :
jq . file.json, oupython3 -m json.tool file.json. - Dans VS Code : ouvrez le fichier et appuyez sur Maj+Alt+F (Maj+Option+F sur Mac).
- Dans un navigateur : ouvrez l'URL du
.jsondans Firefox, qui intègre un visualiseur JSON, et cliquez sur Pretty Print. - Sur téléphone : une application JSON avec une commande Beautify, plutôt que coller le texte dans un site web.
- Il refuse de se formater : ce n'est pas encore du JSON valide. Corrigez d'abord ; le message d'erreur du formateur indique où.
Ce que le formatage change, et ne change pas
La mise en forme n'ajoute ou ne retire que des espaces entre les jetons : espaces, tabulations et retours à la ligne en dehors des chaînes. Un formateur correct ne touche jamais aux valeurs. Ces deux documents sont donc identiques :
{"id":7,"tags":["a","b"],"owner":{"name":"Ana"}}
{
"id": 7,
"tags": [
"a",
"b"
],
"owner": {
"name": "Ana"
}
}
Minifier est l'opération inverse : supprimer chaque espace et chaque saut de ligne facultatif. C'est ce qu'on envoie sur un réseau ou qu'on colle dans un champ de configuration qui veut une seule ligne. Aucun des deux sens ne change ce que les données signifient, ce qui explique qu'on puisse reformater sans risque un fichier qu'on n'a pas écrit.
Deux opérations se trouvent à côté du formatage dans la plupart des outils et sont des modifications, même inoffensives : trier les clés, qui réordonne chaque objet par ordre alphabétique, et l'échappement, qui transforme tout le document en une seule chaîne. Faites-les exprès, pas par effet de bord.
Dans un terminal
jq est celui à avoir installé :
jq . data.json # pretty, 2-space indent
jq --indent 4 . data.json # 4 spaces
jq --tab . data.json # tabs
jq -c . data.json # minified, one line
jq -S . data.json # keys sorted A–Z
Pour formater un fichier sur place, écrivez dans un fichier temporaire puis
remettez-le à sa place. jq . data.json > data.json vide le fichier avant que
jq ne le lise.
jq . data.json > tmp.json && mv tmp.json data.json
Python fournit un formateur, il fonctionne donc sur toute machine qui a Python 3 :
python3 -m json.tool data.json
python3 -m json.tool --indent 4 --sort-keys data.json
python3 -m json.tool --compact data.json
Une différence qui compte sur des données réelles : json.tool lit les nombres
comme des flottants Python s'ils ne sont pas entiers, donc une valeur comme
1.10 ressort en 1.1. jq 1.7 et les versions suivantes conservent les
nombres tels qu'ils sont écrits. Si le fichier contient des prix, des numéros
de version ou des identifiants dont les chiffres de tête comptent, vérifiez la
sortie.
Dans un éditeur
VS Code : Maj+Alt+F formate tout le document, ou Format Selection
dans la palette de commandes en formate une partie. Réglez
"editor.formatOnSave": true pour les fichiers [json] si vous les modifiez
souvent. L'indentation suit le réglage de taille de tabulation de l'éditeur.
Sublime Text, Notepad++, les IDE JetBrains formatent tous le JSON, soit nativement (JetBrains : Code → Reformat Code), soit avec un plugin qui s'installe en une ligne (Notepad++ : JSON Viewer ou JSTool).
Prettier est le bon outil quand le JSON de tout un projet doit avoir le
même aspect : npx prettier --write "**/*.json".
Dans un navigateur
Firefox formate automatiquement toute réponse JSON, avec un onglet JSON repliable, un onglet Raw Data et un bouton Pretty Print. C'est le moyen le plus rapide de lire une réponse d'API sans rien installer.
Chrome et Edge affichent une case Pretty-print au-dessus du JSON brut dans les versions récentes. Tout le reste (replier, chercher par clé) demande une extension.
La question des formateurs en ligne
Cherchez ce sujet et la première page n'est que des sites avec une grande zone de texte. Ils fonctionnent. La question, c'est ce que vous y collez.
Une réponse d'API avec un jeton d'accès, un fichier de config avec un mot de passe de base de données, un export clients : tout cela est régulièrement collé dans des formateurs, et vous n'avez aucun moyen de vérifier depuis la page si le texte reste dans votre navigateur ou part vers un serveur pour y être journalisé. Certains sites ont aussi été pris à stocker des documents « partagés » à des URL devinables.
La règle est simple. Si vous ne le colleriez pas dans un chat public, formatez en local. Toutes les options ci-dessus tournent sur votre propre machine.
Choisir une indentation
- 2 espaces est le choix par défaut de fait : jq, Prettier, la plupart des outils JavaScript, la plupart des docs d'API.
- 4 espaces se lit mieux pour des documents très imbriqués sur un grand écran, et c'est la convention de Python.
- Les tabulations laissent chaque lecteur choisir sa largeur, et rendent les fichiers un peu plus légers.
Aucune n'est mauvaise. Choisissez-en une par projet et laissez un formateur l'imposer, pour qu'un diff montre des changements de données plutôt que des changements d'espaces.
Sur iPhone et iPad
Un téléphone est l'endroit où le JSON est le moins lisible, car iOS affiche un
fichier .json en texte brut, sans retour à la ligne. Les façons d'en ouvrir
un sont décrites ici ; le formatage vient
après.
Dans Smart Json, Beautify reformate le document avec une indentation cohérente, Minify le réduit à une ligne, et Sort keys A–Z réordonne chaque objet. L'annulation fonctionne pour les trois. Si le texte ne se parse pas, un bandeau nomme le problème avec sa ligne et sa colonne au lieu de formater quelque chose de à moitié valide, et Fix répare les suspects habituels : commentaires, virgules finales, apostrophes simples et clés sans guillemets.


Beautify, Minify et Sort keys sur iPhone et iPad, hors ligne, avec une erreur en langage clair quand le JSON est cassé. Rien n'est collé dans un site web.
Ce que ça faitQuand le formatage échoue
Un formateur refuse tout ce qui n'est pas du JSON valide, et son erreur est généralement une position : line 1, column 3,912. Sur un document minifié, il n'y a qu'une ligne, donc c'est la colonne qui sert d'indice. Les causes habituelles sont une virgule finale, des apostrophes simples, un commentaire ou une valeur sans guillemets. Chaque erreur courante est expliquée ici, avec ce que signifie chaque message.