Aller au contenu principal

Mettre du JSON en forme

Mise en forme JSON met le JSON en forme avec indentation et retours à la ligne pour qu’un humain puisse le lire. Collez un document ci-dessous pour le faire ici, ou récupérez l’unique ligne de code qui le fait dans votre langage — JavaScript, Python, Go, Java, C#, PHP, Ruby, Rust, jq ou PowerShell — chacun accompagné du réglage par défaut qui piège, car chacune de ces API en a un.

100 % local
Retrait
JSON
0 B1 ligneLig. 1, Col. 1
Mis en formelecture seule
0 B1 ligne
Dans votre langage

Intégré. Aucune dépendance, dans le navigateur et Node.

JavaScript — mise en formelecture seule
225 B7 lignes
Le réglage par défaut qui surprend Le deuxième argument est le filtre, pas l’indentation. Utilisez JSON.stringify(value, null, 2). undefined, fonctions et symboles peuvent disparaître ; BigInt déclenche une TypeError.

Comment fonctionne Mettre du JSON en forme ?

Mettre du JSON en forme signifie une chose : analyser le document, puis le réécrire avec un retour à la ligne après chaque virgule et un niveau d’indentation par niveau d’imbrication. Les octets sont équivalents — un parseur ne sait pas les distinguer — mais l’un est lisible et l’autre est un mur.

Deux questions différentes, une seule page

Les gens qui cherchent cela veulent l’une de deux choses. Soit une boîte où coller un payload, et c’est le panneau ci-dessus ; soit la ligne de code qui le fait dans un programme qu’ils écrivent, et c’est le sélecteur en dessous. Cette page répond aux deux, car être envoyé vers un gadget de formatage quand on avait besoin de json.dumps(obj, indent=2) est un clic gaspillé.

Chaque langage a un réglage par défaut qui surprend quelqu’un

C’est le passage qui vaut la peine d’être connu, et c’est pourquoi les recettes ici portent chacune une note au lieu d’être une liste d’extraits de code d’une ligne. Python échappe tout caractère non ASCII si vous ne passez pas ensure_ascii=False, si bien que café arrive en caf\u00e9. Go échappe <, > et & parce que la sortie a pu un jour finir dans une balise <script>. PHP échappe les barres obliques, donc chaque URL de votre sortie semble cassée. Le ConvertTo-Json de PowerShell tronque tout ce qui est imbriqué à plus de deux niveaux et ne vous prévient pas — il remplace simplement le reste par un nom de type et continue.

Et en JavaScript, l’erreur est dans l’appel lui-même : JSON.stringify(value, 2) semble correct, compile, s’exécute, et renvoie la chaîne minifiée, car le deuxième argument est la fonction replacer et le troisième est l’indentation.

Trier les clés est une décision à part

Alphabétiser les clés rend deux versions d’un même document comparables par diff, et c’est là toute la raison de le faire — sans cela, un sérialiseur qui émet les clés dans l’ordre d’insertion produit un diff plein de déplacements. C’est désactivé par défaut ici parce que cela change l’ordre du document, et pour un fichier de configuration ou un lockfile cet ordre a parfois du sens.

L’indentation, et quoi choisir

Deux espaces, c’est la convention du web et de JavaScript, et cela garde les documents profondément imbriqués à l’écran. Quatre, c’est la norme en Python et dans une grande partie du monde backend. Les tabulations laissent chaque lecteur choisir sa propre largeur, ce qui est leur meilleur argument et la raison pour laquelle certains projets y tiennent. Aucune des trois n’est plus correcte que les autres ; la seule mauvaise réponse, c’est de les mélanger dans un même fichier.

Cela ne change pas ce que signifient les données

Les espaces entre les jetons ne sont pas significatifs en JSON, donc la mise en forme est réversible et sans perte — passez la sortie dans un minificateur et vous récupérez l’entrée, à l’octet près, sauf si vous avez aussi trié les clés. Ce que cela change, en revanche, c’est la taille : l’indentation peut ajouter 20–40% à un document, ce qui compte sur le fil et ne compte pas du tout dans un journal que vous êtes en train de lire.

Si le document ne s’analyse pas, rien ici ne peut le formater, et l’erreur ci-dessous nomme la ligne et la colonne. Le Validateur JSON proposera aussi de réparer les causes habituelles — une virgule finale, une apostrophe, une clé sans guillemets.

Rien n’est envoyé

Le fichier est traité dans cet onglet. La page peut télécharger les bibliothèques ou les modèles nécessaires ; cette opération n’envoie pas le fichier.

Minifié

{"id":42,"tags":["prod","payment"],"ok":true}

Mis en forme

{
  "id": 42,
  "tags": [
    "prod",
    "payment"
  ],
  "ok": true
}

Quelles options et quels cas limites Mettre du JSON en forme prend en charge ?

Référence technique et options
ParamètreTypeValeur par défautComportement et cas limites
JavaScriptJSON.stringifyintégréJSON.stringify(value, null, 2). Le deuxième argument est le replacer — y passer 2 ne fait absolument rien.
Pythonjson.dumpsbibliothèque standardjson.dumps(obj, indent=2). Ajoutez ensure_ascii=False ou chaque caractère non ASCII sera échappé.
jqshell—jq . file.json, et jq -S . pour trier les clés. Avant jq 1.7, les grands entiers étaient silencieusement modifiés.
Ligne de commandepython3 -m json.tool—Présent sur presque toutes les machines, avec --indent, --sort-keys et --no-ensure-ascii.
Goencoding/jsonbibliothèque standardjson.MarshalIndent pour une valeur, json.Indent pour des octets que vous avez déjà. Les deux échappent les crochets.
JavaJackson—writerWithDefaultPrettyPrinter(). Son affichage par défaut imprime les tableaux sur une seule ligne tant que vous n’avez pas défini un indenteur de tableau.
C#System.Text.Json.NET Core 3+JsonSerializerOptions { WriteIndented = true }. Échappe beaucoup plus que ce que la spécification exige.
PHPjson_encodeintégréJSON_PRETTY_PRINT, plus JSON_UNESCAPED_SLASHES et JSON_UNESCAPED_UNICODE, que vous voulez presque toujours.
RubyJSON.pretty_generatebibliothèque standardPas la même chose que to_json, qui reste compact.
Rustserde_json—to_string_pretty. La valeur trie les clés sauf si la fonctionnalité preserve_order est activée.
PowerShellConvertTo-JsonintégréPar défaut à -Depth 2 et tronque silencieusement en dessous. Toujours passer -Depth explicitement.

Questions fréquentes

Comment mettre du JSON en forme en JavaScript ?

JSON.stringify(value, null, 2). Les trois arguments sont la valeur, un replacer et l’indentation — d’où l’erreur que tout le monde fait une fois : JSON.stringify(value, 2), qui place 2 dans l’emplacement du replacer, ne fait rien et renvoie la chaîne minifiée. Passez "\t" au lieu de 2 pour des tabulations. Sachez ce que stringify écarte discrètement en chemin : les valeurs undefined et les fonctions disparaissent des objets et deviennent null dans les tableaux, un Map ou Set devient {}, et un BigInt lève une exception.

Comment mettre du JSON en forme en Python ?

json.dumps(obj, indent=2). Le réglage par défaut qui piège, c’est ensure_ascii=True, qui échappe tout caractère non ASCII — « café » ressort en « caf\u00e9 », valide et illisible. Passez ensure_ascii=False pour conserver l’UTF-8, et ouvrez alors tout fichier de sortie avec encoding="utf-8". sort_keys=True alphabétise, ce qui rend deux sorties comparables par diff.

Comment mettre du JSON en forme depuis la ligne de commande ?

jq . file.json si jq est installé ; python3 -m json.tool file.json sinon, ce qui couvre presque toutes les machines dotées de Python. jq ajoute le tri avec -S, une indentation configurable avec --indent, et la compaction avec -c. Une précaution : jusqu’à jq 1.6, les nombres étaient analysés comme des doubles, si bien qu’un ID 64 bits pouvait ressortir silencieusement modifié — jq 1.7 préserve les littéraux numériques non modifiés, donc vérifiez la version avant d’y faire passer des identifiants.

Le JSON mis en forme reste-t-il du JSON valide ?

Oui. Les espaces entre les jetons n’ont aucun sens en JSON, donc un document indenté et un document minifié s’analysent en exactement la même valeur — la RFC 8259 autorise espace, tabulation, retour à la ligne et retour chariot partout entre les jetons structurels. La seule différence est la taille : l’indentation ajoute typiquement 20–40%, ce qui mérite d’être retiré avant d’envoyer un payload sur le fil et mérite d’être gardé dans tout ce qu’un humain lit.

Quelle différence y a-t-il entre « pretty print », « format » et « beautify » ?

Aucune, en tant que verbes — tous trois signifient ajouter des espaces pour que la structure soit visible. Les trois pages diffèrent par ce qu’elles font en plus. Celle-ci associe le formateur au code pour le faire dans chaque langage. Le Formateur JSON possède le jeu d’options complet : suppression des commentaires JSONC, tri des clés, échappement Unicode. L’Embellisseur JSON vise le travail précis qui consiste à rendre à nouveau lisible un bloc minifié. Prenez celle qui correspond à ce que vous cherchiez.

Pourquoi ma sortie mise en forme contient-elle des échappements \u ?

Parce que le sérialiseur a échappé les caractères non ASCII, et plusieurs le font par défaut. Le json.dumps de Python a ensure_ascii=True ; le System.Text.Json de C# échappe tout ce que son encodeur HTML-safe n’aime pas ; PHP échappe le non-ASCII sauf indication contraire. Tout cela est du JSON valide et rien de tout cela n’est lisible. Le remède est un argument dans chaque cas — ensure_ascii=False, UnsafeRelaxedJsonEscaping, JSON_UNESCAPED_UNICODE — et le sélecteur ci-dessus l’affiche pour le langage où vous êtes.

Mon JSON est-il envoyé à un serveur ?

Non. L’analyse et la resérialisation se font dans cet onglet, en JavaScript déjà chargé sur la page, et il n’y a aucun endpoint au bout du fil où envoyer quoi que ce soit. Cela compte ici plus qu’il n’y paraît : les documents que l’on met en forme sont des réponses d’API et des lignes de journal, qui transportent couramment des tokens, des identifiants de session et des données clients.