Aller au contenu
jsonbeautifiers
Français

Échapper du JSON

Transforme n’importe quel texte en chaîne sûre à intégrer dans du JSON.

Texte
Échappé

Rien de ce que vous collez ne quitte votre navigateur. La liste d’autorisation connect-src en fait une garantie du navigateur plutôt qu’une promesse. Vérifiez-le vous-même

Transformez un texte quelconque en quelque chose que l’on peut placer sans risque dans une chaîne JSON. Guillemets, antislashs, sauts de ligne, tabulations et caractères de contrôle sont échappés ; tout le reste est laissé tel quel.

C’est l’opération dont vous avez besoin quand vous insérez à la main un payload, une ligne de journal, une requête SQL ou un fragment HTML dans un champ JSON.

Ce qui doit être échappé, et ce qui ne doit pas l’être

JSON définit exactement neuf séquences d’échappement et impose l’échappement dans exactement trois situations.

Le guillemet double
Devient \". Il terminerait sinon la chaîne.
L’antislash
Devient \\. Il démarrerait sinon un échappement.
Les caractères de contrôle, U+0000 à U+001F
Un saut de ligne devient \n, une tabulation \t, un retour chariot \r, un retour arrière \b, un saut de page \f. Tout le reste de cette plage prend la forme \uXXXX.
La barre oblique
Peut être échappée en \/ mais n’est pas obligée de l’être. Les deux formes désignent le même caractère. L’échappement existe pour pouvoir insérer du JSON dans un élément script HTML, où la séquence </ y mettrait fin.
Les caractères non-ASCII
N’ont pas besoin d’être échappés. JSON est en UTF-8 et é, 你 et 🎉 sont tous légaux littéralement. Les échapper est une option ici, pour les systèmes qui abîment le non-ASCII en transit.
L’apostrophe
N’a besoin de rien. À l’intérieur d’une chaîne entre guillemets doubles c’est un caractère ordinaire, et \' n’est pas un échappement JSON valide.

Demi-codets et émojis

Un caractère hors du Plan Multilingue de Base, ce qui inclut tous les émojis, est stocké sur deux unités de code UTF-16. L’échapper produit deux séquences \u, comme \ud83c\udf89 pour un cotillon. C’est correct et tout analyseur reconstitue le caractère.

Un demi-codet isolé, la moitié d’une telle paire sans son partenaire, est toujours échappé ici même quand rien d’autre ne l’est, car l’émettre littéralement produit un texte qui n’est pas de l’Unicode bien formé et qui se corrompt au ré-encodage en UTF-8.

La meilleure réponse, la plupart du temps

Si vous échappez à la main dans le but de construire du JSON, arrêtez et sérialisez plutôt. JSON.stringify, json.dumps et leurs équivalents échappent correctement chaque valeur par construction, et ils ne peuvent pas en oublier une.

Le JSON fabriqué à la main est la cause profonde de presque toutes les erreurs de caractère de contrôle invalide et de chaîne non terminée qui existent.

How to do this in code

Échapper en code.

js JavaScript
// Escaped and quoted
const quoted = JSON.stringify(text);

// Escaped without the surrounding quotes
const escaped = JSON.stringify(text).slice(1, -1);
py Python
import json

quoted = json.dumps(text)                      # with quotes, non-ASCII escaped
quoted = json.dumps(text, ensure_ascii=False)  # with quotes, é stays é
escaped = json.dumps(text)[1:-1]
sh Shell
# jq's @json filter escapes and quotes
printf '%s' "$text" | jq -Rs @json

# -R reads raw input, -s slurps it into one string
go Go
b, _ := json.Marshal(text)   // includes the quotes

// Marshal escapes <, > and & by default for HTML safety.
// To turn that off you need an Encoder:
var buf bytes.Buffer
enc := json.NewEncoder(&buf)
enc.SetEscapeHTML(false)
enc.Encode(text)

Questions fréquentes

Dois-je échapper les apostrophes ?
Non. Dans une chaîne JSON entre guillemets doubles, une apostrophe est un caractère ordinaire, et \' n’est pas du tout un échappement JSON valide. Il l’est en JavaScript et en JSON5, d’où vient l’habitude.
Faut-il échapper les caractères non-ASCII ?
Pas en général. JSON est en UTF-8 et les caractères accentués, le CJK et les émojis sont tous légaux littéralement. Ne les échappez que si quelque chose dans la chaîne de traitement abîme le non-ASCII, ce qui est une raison de réparer cette chaîne.
Et un chemin Windows ?
Chaque antislash double : C:\\Users\\priya. Un chemin se terminant par un seul antislash est pire que faux, car il échappe le guillemet de fermeture et avale le reste de votre document.