Outil d'échappement JSON
Échapper et déséchapper rapidement les chaînes JSON
Sélectionner la méthode de conversion
Qu'est-ce que l'échappement JSON ?
L'échappement JSON est le processus de conversion des caractères spéciaux dans les chaînes JSON en séquences d'échappement. Les caractères d'échappement courants incluent : " en \", \\ en \\\\, les nouvelles lignes en \n, les tabulations en \t, etc.
Cas d'utilisation : Lorsque vous devez intégrer JSON dans une autre chaîne JSON, définir des constantes de chaîne JSON dans le code, ou stocker des données JSON dans une base de données, l'échappement est requis.
L’échappement JSON prépare un texte pour l’insérer correctement dans une chaîne JSON. Guillemets, antislashs, retours à la ligne, tabs et caractères de contrôle doivent être échappés, sinon le parser peut les lire comme structure plutôt que contenu. C’est utile pour payloads d’API, valeurs de configuration, logs, messages d’erreur intégrés et données de test. Échapper une chaîne ne valide pas tout le document JSON et ne rend pas automatiquement le résultat sûr pour HTML, JavaScript, SQL ou shell.Comment utiliser
Comment utiliser
- Collez ou saisissez du texte dans la zone de saisie
- Cliquez sur « JSON Escape » pour échapper les caractères spéciaux (par ex. ' devient \')
- Cliquez sur « JSON Unescape » pour restaurer les caractères échappés (par ex. \' devient ')
- Le résultat apparaît automatiquement ci-dessous, prêt à être copié
Notes sur l'échappement
- Échappez le texte uniquement pour le contexte cible ; les chaînes JSON, le code JavaScript source, les URL et les attributs HTML ont des règles d'échappement différentes.
- Après le déséchappement, vérifiez les sauts de ligne, les antislashs et les guillemets avant de coller dans des fichiers de configuration.
Cas d’utilisation
Principe technique
JSON (RFC 8259) est une grammaire textuelle stricte ; chaque littéral chaîne doit être entouré de guillemets doubles ASCII (U+0022), et tout caractère susceptible de briser cette grammaire doit être exprimé comme une séquence d'échappement par antislash. Les échappements obligatoires sont : le guillemet double en antislash-guillemet, l'antislash en double-antislash, et les 32 caractères de contrôle de U+0000 à U+001F (qui incluent \b U+0008, \f U+000C, \n U+000A, \r U+000D, \t U+0009). Tout caractère au-dessus de U+001F peut apparaître dans la chaîne sous forme de sa séquence d'octets UTF-8 brute, y compris les idéogrammes CJK, les émojis, les lettres accentuées et les autres caractères supplémentaires. Le caractère slash oblique peut être échappé optionnellement (\/), mais la convention est de l'échappeler lorsque le JSON est intégré dans des balises HTML <script>, afin que la séquence de fermeture de balise script ne ferme pas prématurément l'élément script environnant. Deux couches d'échappement apparaissent en pratique. L'échappement JSON (la substitution syntaxique) est le seul que la RFC 8259 requiert : il garantit que la chaîne est un JSON valide, c'est tout. L'échappement Unicode (réécrire chaque caractère en \uXXXX ou \u{XXXXX}) est un choix de représentation, pas une exigence syntaxique — il ne modifie que l'apparence des octets dans le fichier, pas ce vers quoi ils se décodent. Le texte CJK est déjà valide en JSON sous forme d'octets UTF-8 bruts ; le mode échappement Unicode de la page le réécrit en \uXXXX, ce qui est utile lorsque la chaîne est injectée dans un fichier source Java ou JavaScript où le parseur environnant devrait sinon gérer de l'UTF-8 multi-octets, mais cela ajoute 4 à 6 octets par caractère et nuit à la lisibilité. Les règles d'échappement ont des cas limites. JSON.parse est strict sur les zéros non significatifs (01 est une erreur de parsing, même si JavaScript l'accepterait comme un 1 octal) ; JSON.stringify dans V8 produit toujours les échappements minimaux nécessaires (caractères de contrôle en \b/\n/\r/\t/\f quand c'est possible, sinon en \uXXXX, et le solidus /, U+2028, U+2029 sont laissés bruts pour une sortie lisible). Un surrogate isolé (un high surrogate non suivi d'un low surrogate) est techniquement un JSON valide selon la RFC 8259, mais JSON.parse en mode strict ou dans TypeScript le rejette comme InvalidString ; le mode échappement de la page remplace les surrogates isolés par \uFFFD (caractère de remplacement) pour que la sortie passe dans n'importe quel parseur standard. Pour l'intégration dans du code source JavaScript, la chaîne JSON nécessite une troisième couche d'échappement : un JSON à l'intérieur d'un littéral chaîne JS doit échapper les antislashs eux-mêmes. Le mode de sortie chaîne JS de la page ajoute ce double échappement, et le bouton eval ou JSON.parse montre que les deux encodages se décodent vers la même chaîne. Les contextes intégrés dans du HTML ajoutent une quatrième couche : <, > et & nécessitent un échappement par entités HTML dans la page environnante, et les valeurs d'attributs nécessitent aussi un échappement des guillemets. Le JSON dans du HTML est notoirement dangereux (le piège de </script> ci-dessus) et il est préférable de l'éviter au profit de destinations sûres comme l'affectation textContent ou JSON.stringify dans un bloc <script type="application/json"> (lu ensuite via script.textContent, jamais eval). JSON5 (un superset populaire) ajoute les chaînes à guillemets simples, les chaînes multilignes, les clés non guillemetées, les virgules finales, NaN/Infinity et les commentaires monolignes //. La page ne produit pas de sortie JSON5 ; si vous avez besoin d'un aller-retour, utilisez une bibliothèque dédiée.
- Les chaînes JSON (RFC 8259) doivent échapper le guillemet double en antislash-guillemet, l'antislash en double-antislash, et les 32 caractères de contrôle U+0000..U+001F (\b \f \n \r \t, plus le reste en \uXXXX). Tout ce qui est au-dessus de U+001F est de l'UTF-8 brut valide, y compris le CJK, les émojis et les lettres accentuées.
- Deux couches d'« échappement » apparaissent : l'échappement JSON (syntaxique, obligatoire) rend la chaîne valide en JSON ; l'échappement Unicode (représentationnel) réécrit les caractères en \uXXXX et ne modifie que la lisibilité, pas la validité.
- « / » optionnel : / en \/ est autorisé en JSON. Convention : l'échappeler lors de l'intégration de JSON dans du HTML <script> pour que la séquence de fermeture de balise script ne ferme pas la balise environnante.
- Le CJK n'est pas échappé en UTF-8 brut JSON : l'exemple « 你好 » fait 6 octets bruts. Le mode échappement Unicode de la page le réécrit en \u4f60\u597d pour une utilisation dans des fichiers source, ce qui sacrifie la lisibilité au profit de la compatibilité.
- Surrogates isolés : un high surrogate (U+D800..U+DBFF) non suivi d'un low surrogate est techniquement un JSON valide selon la RFC 8259, mais JSON.parse en mode strict ou TypeScript le rejette. La page remplace les surrogates isolés par \uFFFD pour que la sortie passe dans les parseurs stricts.
- JSON.parse est strict : les zéros non significatifs (01) sont une erreur de parsing, NaN/Infinity ne sont pas des littéraux valides, les virgules finales ne sont pas autorisées. JSON.stringify dans V8 produit toujours les échappements minimaux nécessaires et laisse le solidus / et U+2028/U+2029 bruts pour la lisibilité.
- JSON dans JS : pour intégrer une chaîne JSON dans un littéral chaîne JS, doublez les antislashs. La sortie « chaîne JS » de la page ajoute cette couche ; eval sur le résultat donne la même chaîne que JSON.parse.
- Superset JSON5 : chaînes à guillemets simples, chaînes multilignes, clés non guillemetées, virgules finales, NaN/Infinity, commentaires monolignes //. La page produit du JSON strict RFC 8259, pas du JSON5.
Exemples
Chaînes avec guillemets doubles et antislashs
Entrée: He said "Hello\World"
Sortie: He said \"Hello\\World\"Chaînes avec sauts de ligne et tabulations
Entrée: Line1\tIndent\nLine2
Sortie: Line1\tIndent\nLine2Chaînes avec caractères chinois et guillemets doubles
Entrée: {"name": "Alice", "msg": "He said \"Hi\""}
Sortie: {\"name\": \"Alice\", \"msg\": \"He said \\\"Hi\\\"\"}FAQ
Que fait l'échappement d'une chaîne JSON ?
Il entoure l'entrée de guillemets et remplace chaque caractère spécial par sa séquence d'échappement compatible JSON : " → \", \ → \\, saut de ligne → \n, tabulation → \t, caractères de contrôle → \u00NN. Le résultat est un littéral de chaîne JSON valide que vous pouvez coller dans un autre document JSON ou dans un éditeur de code.
Pourquoi en aurais-je besoin ?
Cas courants : intégrer un message multi-lignes dans un fichier de configuration JSON, passer une chaîne JSON en argument de ligne de commande, mettre du JSON dans du JSON (par exemple un corps de requête API qui est lui-même une chaîne encodée en JSON), ou nettoyer une saisie utilisateur avant journalisation.
L'échappement JSON est-il identique à l'encodage URL ?
Non. L'échappement JSON utilise \n, \", \u00XX. L'encodage URL utilise %20, %22, %0A. Contextes syntaxiques différents, règles d'échappement différentes. Utilisez celui qui correspond au format de destination.
Le mode de désescappement gère-t-il toutes les séquences JSON ?
Oui — toutes les séquences standard (\", \\, \/, \b, \f, \n, \r, \t, \uXXXX). Les paires de substitution pour les points de code au-delà de U+FFFF (\uD83D\uDE00 = 😀) sont réassemblées en l'emoji réel. Les séquences mal formées produisent une erreur que vous pouvez corriger.
Quelle est la différence entre échapper une chaîne et sérialiser un objet ?
L'échappement transforme un texte en une chaîne JSON entre guillemets. La sérialisation (JSON.stringify) transforme un objet JavaScript en un document JSON complet. Cette page fait la première ; pour la seconde, écrivez l'objet en JSON dans votre éditeur ou utilisez un formateur JSON.
Les caractères de contrôle sont-ils toujours échappés ?
Oui — JSON l'exige. Les sauts de ligne, tabulations, NULL et autres caractères de contrôle ASCII (0x00-0x1F) doivent être échappés, sinon la chaîne résultante n'est pas du JSON valide. Certaines implémentations échappent aussi DEL (0x7F) et les caractères au-delà de U+FFFF ; cette page applique strictement la RFC 8259.
Les données sont-elles envoyées quelque part ?
Non. L'échappement et le désescappement s'exécutent dans votre navigateur. Le texte collé n'est pas téléversé.