Échappement / dééchappement de chaîne JSON
JSONÉchappe et dééchappe les chaînes JSON — guillemets, caractères de contrôle et \uXXXX.
Sur cette page
Qu’est-ce que l’échappement de chaîne JSON ?#
Au sein d’un document JSON, une chaîne doit figurer entre des guillemets doubles — et cela pose problème dès que le texte contient lui-même un guillemet, un saut de ligne ou une barre oblique inverse. Si vous les insériez tels quels, l’analyseur verrait le guillemet fermant trop tôt, ou traiterait \ comme le début d’une séquence d’échappement qu’il ne comprend pas. L’échappement consiste à remplacer ces caractères par les courtes séquences à barre oblique inverse définies par la spécification JSON : \" pour un guillemet, \\ pour une barre oblique inverse, \n pour un saut de ligne, \t pour une tabulation, et quelques autres. Le dééchappement fait l’inverse — reconvertir ces séquences en caractères originaux.
Il existe un second mode, plus strict. Certains systèmes anciens — collecteurs de journaux d’il y a quelques années, bases de données restrictives, couches de transport qui supposent de l’ASCII pur — bloquent sur tout octet supérieur à 127. Pour ceux-là, le JSON permet aussi d’écrire n’importe quel caractère non ASCII sous la forme \uXXXX (et les caractères astraux comme les emoji sous forme de paire de substitution UTF-16). Le texte reste du JSON valide ; il se trouve simplement qu’il est entièrement composé d’ASCII après échappement.
Cette page gère les deux sens et les deux modes : échapper une chaîne brute vers un littéral de chaîne JSON valide, ou dééchapper un littéral pour retrouver le texte d’origine — avec un commutateur ASCII uniquement optionnel qui force chaque point de code non ASCII à prendre la forme \uXXXX.
Mode d’emploi#
- Choisissez le sens avec le commutateur Encoder / Décoder en haut à gauche de la barre d’outils. Encoder transforme le texte brut en littéral JSON ; Décoder reconvertit un littéral en texte.
- Saisissez ou collez votre texte dans le panneau Entrée à gauche.
- En mode Encoder, tout le texte devient un seul littéral de chaîne JSON (guillemets englobants compris).
- En mode Décoder, vous pouvez coller soit un littéral entre guillemets (
"a\nb"), soit seulement le corps échappé sans guillemets (a\nb) — l’outil ajoute les guillemets pour vous. Un nombre, un booléen ou un objet JSON valide est refusé comme « n’est pas une chaîne » plutôt qu’être silencieusement converti.
- Cochez Sortie ASCII uniquement (\uXXXX) (mode Encoder) quand le consommateur en aval ne gère pas les octets non ASCII. Les caractères astraux comme les emoji sont émis sous forme d’une paire de substitution correcte, exactement comme le ferait
JSON.stringify. - Le résultat apparaît en direct dans le panneau Sortie. Cliquez sur Copier pour le récupérer.
- Exemple charge une chaîne de démonstration multilingue ; Effacer réinitialise les deux panneaux.
Principales fonctionnalités#
- Formes courtes exactes selon la spécification. Utilise précisément les séquences requises par la RFC 8259 (
\",\\,\b,\f,\n,\r,\t) et \uXXXX pour tout le reste sous 0x20 — identique octet pour octet àJSON.stringify. - Vrai mode ASCII uniquement. Les caractères non ASCII ne sont ni supprimés silencieusement ni transformés en Mojibake ; chacun est émis sous la forme \uXXXX, et les caractères astraux (au-dessus de U+FFFF) deviennent une paire de substitution UTF-16 correcte, pas une unité de code isolée cassée que les décodeurs rejetteraient.
- Dééchappement tolérant. Accepte aussi bien un littéral pleinement entre guillemets qu’un corps échappé sans guillemets, afin que les fragments à moitié collés depuis une ligne de journal se décodent toujours au lieu de provoquer une erreur.
- Refuse de deviner. Si l’entrée décodée est du JSON valide mais pas une chaîne (par exemple un nombre seul ou un tableau), l’outil vous le signale au lieu de la convertir en chaîne en cachette.
Exemple détaillé#
Chargez Exemple en mode Encoder et l’entrée est une chaîne mêlant délibérément guillemets, chemin à barres obliques inverses, saut de ligne, signe copyright, un emoji et du chinois :
He said "hi"
\path\ © 🌍 你好
Sans ASCII uniquement, le littéral échappé conserve les caractères lisibles tels quels et ne met en guillemets que ce qui doit l’être :
"He said \"hi\"\n\\path\\ © 🌍 你好"
Activez maintenant Sortie ASCII uniquement (\uXXXX) et la même entrée devient pure ASCII — le signe copyright se réduit à la forme à quatre caractères \u00a9, l’emoji globe à la paire de substitution \ud83c\udf0d, et chaque caractère chinois à son propre point de code (\u4f60, \u597d) :
"He said \"hi\"\n\\path\\ \u00a9 \ud83c\udf0d \u4f60\u597d"
Basculez sur Décoder et collez l’un ou l’autre de ces littéraux : le texte d’origine — emoji et chinois compris — est restitué à l’identique.
FAQ#
Pourquoi l’emoji se transforme-t-il en deux codes \u au lieu d’un seul ?#
Les caractères au-dessus de U+FFFF (emoji, extensions CJK rares, certains symboles mathématiques) ne tiennent pas dans une seule unité de code de 16 bits, aussi UTF-16 les représente-t-il par une paire de substitution — une haute substitution suivie d’une basse substitution. L’emoji globe 🌍 (U+1F30D) devient \ud83c\udf0d. Émettre un seul \u produirait du JSON invalide que les décodeurs stricts rejetteraient ; cet outil émet la paire exactement comme le fait JSON.stringify, de sorte que la sortie fait un aller-retour correct.
Décoder affiche « L’entrée n’est pas une chaîne JSON ». Qu’ai-je collé ?#
Vous avez collé quelque chose qui est du JSON valide mais pas une chaîne — typiquement un nombre seul (42), un booléen (true) ou un objet/tableau. L’outil refuse de le convertir en chaîne parce que cela masquerait une vraie erreur (vous vouliez presque certainement coller la valeur de la chaîne, pas tout le document). Mettez votre texte entre guillemets et réessayez.
Gère-t-il les caractères de contrôle comme une tabulation littérale ou un signal sonore ?#
Oui. Une tabulation littérale en entrée devient \t, un retour arrière \b, un saut de page \f, un retour chariot \r ; tout autre code de contrôle sous U+0020 (y compris le signal sonore, 0x07) devient un code de la forme \u0007. C’est important, car les caractères de contrôle bruts sont interdits au sein des chaînes JSON et certains analyseurs les rejettent purement et simplement.
La sortie ASCII uniquement est-elle « plus sûre » ?#
Seulement pour un type de sécurité précis : survivre à une couche de transport qui altère ou rejette les octets non ASCII. Ce n’est pas une mesure de sécurité — les données restent pleinement réversibles, simplement exprimées dans un alphabet plus restrictif. Utilisez-le quand un consommateur exige de l’ASCII ; laissez-le désactivé sinon, car la forme lisible est bien plus facile à déboguer.