L'échappement de chaînes JSON est le processus de conversion des caractères spéciaux à l'intérieur d'une chaîne en séquences d'échappement que les parseurs JSON peuvent lire sans rompre la structure. La spécification JSON (ECMA-404 / RFC 8259) exige que certains caractères à l'intérieur des valeurs de type chaîne soient précédés d'un backslash. Sans échappement correct, un guillemet double ou un saut de ligne littéral à l'intérieur d'une chaîne terminerait la chaîne prématurément et produirait une erreur d'analyse.
Toute chaîne JSON est délimitée par des guillemets doubles. Lorsque la chaîne elle-même contient un guillemet double, un backslash ou un caractère de contrôle (U+0000 à U+001F), ce caractère doit être remplacé par sa séquence d'échappement. Par exemple, un saut de ligne littéral devient \n, une tabulation devient \t, et un guillemet double devient \". Tout point de code Unicode peut également être représenté sous la forme \uXXXX, où XXXX est la valeur hexadécimale à quatre chiffres.
Le déséchappement (l'opération inverse) reconvertit ces séquences à backslash en caractères d'origine. Utilisez-le lorsque vous recevez un payload JSON dont les valeurs de type chaîne sont doublement échappées, ou lorsque vous devez extraire du texte brut d'une entrée de journal JSON pour l'afficher dans une interface ou un terminal. Les pipelines d'agrégation de logs rencontrent constamment ce cas : lorsqu'un message encodé en JSON est stocké comme valeur de type chaîne à l'intérieur d'un autre document JSON, chaque backslash de la chaîne intérieure arrive doublé.
Pourquoi utiliser un outil d'échappement JSON ?
Ajouter ou supprimer des backslashes manuellement est fastidieux et source d'erreurs, surtout avec du texte multiligne, des chemins de fichiers ou des extraits de code imbriqués. Un outil dédié gère les cas limites que l'édition manuelle laisse passer.
🔒
Traitement axé sur la confidentialité
Vos chaînes ne quittent jamais votre navigateur. Tout l'échappement et le déséchappement s'exécute localement en JavaScript sans aucun appel serveur, de sorte que les données sensibles comme les clés API ou les tokens restent sur votre machine.
⚡
Conversion instantanée
Collez n'importe quel texte et obtenez un résultat JSON correctement échappé en quelques millisecondes. Pas d'attente liée à un aller-retour vers un serveur distant.
🛡️
Aucun compte ni installation
Ouvrez la page et commencez à échapper. Pas de formulaire d'inscription, pas d'extension de navigateur, pas d'outil CLI à installer. Fonctionne sur tout appareil disposant d'un navigateur moderne.
📋
Couverture complète des caractères
Gère tous les échappements requis par JSON : guillemets doubles, backslashes, caractères de contrôle (U+0000 à U+001F) et séquences Unicode incluant les emoji et les caractères CJK.
Cas d'utilisation de l'échappement JSON
Développement frontend
Échappez le contenu généré par les utilisateurs avant de l'intégrer dans un payload JSON envoyé via fetch ou XMLHttpRequest. Évite les requêtes malformées lorsque les utilisateurs saisissent des guillemets, des sauts de ligne ou des emoji.
Développement d'API backend
Construisez des corps de réponse JSON dans des langages qui n'échappent pas automatiquement les chaînes (scripts shell, procédures stockées SQL, moteurs de templates). Collez la chaîne brute, copiez la version échappée.
DevOps et configuration
Intégrez des blocs PEM de certificats multilignes, des clés SSH ou des scripts shell dans des fichiers de configuration JSON pour Terraform, CloudFormation ou les ConfigMaps Kubernetes sans rompre la structure JSON.
QA et tests
Créez des fixtures de test incluant des caractères limites : tabulations, octets nuls, paires de substitution Unicode et chaînes imbriquées échappées. Vérifiez que votre parseur les gère correctement.
Ingénierie des données
Nettoyez les entrées de journal doublement échappées provenant d'Elasticsearch, CloudWatch ou Datadog. Déséchappez la chaîne pour récupérer le message d'origine et l'analyser ou le réingérer.
Apprentissage du JSON
Voyez exactement quels caractères nécessitent un échappement selon la spécification JSON. Utile pour les développeurs qui étudient ECMA-404 ou qui construisent leur propre parseur JSON.
Référence des séquences d'échappement JSON
La spécification JSON définit exactement deux échappements obligatoires (guillemet double et backslash) et six séquences courtes pour les caractères de contrôle courants. Tous les autres caractères de contrôle (U+0000 à U+001F) doivent utiliser la forme \uXXXX. Les caractères au-delà de U+FFFF (comme les emoji) peuvent être représentés sous forme de paire de substitution UTF-16 : \uD83D\uDE00.
Caractère
Description
Forme échappée
"
Double quote
\"
\
Backslash
\\
/
Forward slash
\/ (optional)
\n
Newline (LF)
\n
\r
Carriage return
\r
\t
Tab
\t
\b
Backspace
\b
\f
Form feed
\f
U+0000–U+001F
Control characters
\u0000–\u001F
U+0080+
Non-ASCII (e.g. emoji)
\uXXXX or raw UTF-8
Échappement JSON vs encodage JSON
Les développeurs confondent parfois l'échappement d'une chaîne avec l'encodage d'un document JSON complet.
Échappement de chaîne
Opère sur le texte à l'intérieur d'une valeur de type chaîne JSON. Remplace les caractères spéciaux par des séquences à backslash afin que la chaîne reste valide entre guillemets doubles. Entrée : texte brut. Sortie : texte échappé (les guillemets entourants sont encore nécessaires pour former du JSON valide).
Encodage JSON (sérialisation)
Convertit une structure de données entière (objets, tableaux, nombres, booléens, nulls) en une représentation textuelle JSON. L'échappement des chaînes est une étape au sein de ce processus plus large. Entrée : une structure de données. Sortie : un document JSON complet.
Exemples de code
Chaque langage majeur dispose de fonctions intégrées pour cela. Exemples en JavaScript, Python, Go et jq :
JavaScript (browser / Node.js)
// JSON.stringify escapes a value and wraps it in quotes
JSON.stringify('Line 1\nLine 2') // → '"Line 1\\nLine 2"'
// To get just the inner escaped string (no surrounding quotes):
const escaped = JSON.stringify('She said "hello"').slice(1, -1)
// → 'She said \\"hello\\"'
// Parsing reverses the escaping
JSON.parse('"tabs\\tand\\nnewlines"') // → 'tabs\tand\nnewlines'
// Handling Unicode: emoji in JSON
JSON.stringify('Price: 5\u20ac') // → '"Price: 5\u20ac"' (raw euro sign)
Python
import json
# json.dumps escapes and quotes a string
json.dumps('Line 1\nLine 2') # → '"Line 1\\nLine 2"'
# Ensure ASCII: replace non-ASCII with \uXXXX sequences
json.dumps('Caf\u00e9', ensure_ascii=True) # → '"Caf\\u00e9"'
# Keep UTF-8 characters as-is (default in Python 3)
json.dumps('Caf\u00e9', ensure_ascii=False) # → '"Caf\u00e9"'
# Unescape by round-tripping through json.loads
json.loads('"She said \\"hello\\""') # → 'She said "hello"'
Go
package main
import (
"encoding/json"
"fmt"
)
func main() {
// json.Marshal escapes a Go string for JSON
raw := "Line 1\nLine 2\tindented"
b, _ := json.Marshal(raw)
fmt.Println(string(b))
// → "Line 1\nLine 2\tindented"
// Unescape with json.Unmarshal
var out string
json.Unmarshal([]byte(`"She said \"hello\""`), &out)
fmt.Println(out)
// → She said "hello"
}
CLI (jq)
# Escape a raw string into a JSON-safe value
echo 'Line 1
Line 2 with tab' | jq -Rs '.'
# → "Line 1\nLine 2\twith tab\n"
# Unescape a JSON string back to raw text
echo '"She said \"hello\""' | jq -r '.'
# → She said "hello"
Questions fréquemment posées
Quels caractères doivent être échappés dans une chaîne JSON ?
La spécification JSON (RFC 8259) exige l'échappement du guillemet double (\"), du backslash (\\) et de tous les caractères de contrôle de U+0000 à U+001F. Le slash (/) peut être échappé en \/ mais c'est facultatif. Tous les autres caractères Unicode, y compris le texte non-ASCII et les emoji, peuvent apparaître sans échappement tant que le document utilise l'encodage UTF-8.
Quelle est la différence entre l'échappement JSON et JSON.stringify ?
JSON.stringify() en JavaScript sérialise une valeur JavaScript entière en chaîne JSON, en ajoutant les guillemets doubles entourants et en échappant les caractères spéciaux à l'intérieur. L'échappement JSON désigne spécifiquement le remplacement au niveau des caractères des caractères spéciaux par des séquences à backslash. Appeler JSON.stringify() sur une chaîne effectue cet échappement dans le cadre du processus de sérialisation.
Comment échapper un saut de ligne en JSON ?
Remplacez le caractère de saut de ligne littéral (U+000A) par la séquence de deux caractères \n. De même, le retour chariot (U+000D) devient \r. Si vous utilisez JSON.stringify() ou json.dumps() en Python, ces remplacements se font automatiquement.
Pourquoi ma chaîne JSON est-elle doublement échappée ?
Le double échappement survient lorsqu'une chaîne est sérialisée deux fois. Par exemple, appeler JSON.stringify() sur une chaîne contenant déjà des séquences d'échappement va échapper de nouveau les backslashes : \n devient \\n. Pour corriger cela, parsez d'abord la chaîne avec JSON.parse() avant de la resérialiser, ou vérifiez votre pipeline pour détecter des étapes d'encodage redondantes.
Puis-je utiliser des guillemets simples dans les chaînes JSON ?
Non. La spécification JSON exige des guillemets doubles pour toutes les valeurs de type chaîne et les noms de propriétés. Les guillemets simples ne sont pas du JSON valide et provoqueront une erreur d'analyse. Si vos données sources contiennent des guillemets simples, ils n'ont pas besoin d'être échappés à l'intérieur d'une chaîne JSON délimitée par des guillemets doubles, car les guillemets simples sont des caractères ordinaires dans ce contexte.
Est-il sûr d'utiliser des caractères UTF-8 non échappés dans le JSON ?
Oui, à condition que le document JSON soit encodé en UTF-8, ce que RFC 8259 spécifie comme encodage par défaut et recommandé. Les caractères accentués, les idéographes CJK et les emoji peuvent apparaître directement dans la chaîne sans échappement \uXXXX. Certains systèmes anciens attendent du JSON en ASCII uniquement ; dans ce cas, utilisez l'option ensure_ascii en Python ou un indicateur similaire dans votre langage.
Comment échapper des emoji en JSON ?
Les emoji au-delà de U+FFFF sont représentés en JSON par une paire de substitution UTF-16. Par exemple, le visage souriant (U+1F600) devient \uD83D\uDE00. La plupart des sérialiseurs gèrent cela automatiquement. Si vous écrivez du JSON à la main ou que vos outils ne supportent que le Plan multilingue de base, utilisez la notation en paire de substitution. Sinon, incluez l'emoji directement en tant que caractère UTF-8.