Aller au contenu
jsonbeautifiers
Français

Déséchapper du JSON

Récupérez du JSON lisible depuis une chaîne échappée, quel que soit le nombre de couches.

Échappé
Décodé

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

Prenez une chaîne JSON échappée et récupérez le texte d’origine. Les guillemets qui l’entourent sont retirés s’ils sont là, les séquences d’échappement sont décodées, et \uXXXX devient le caractère qu’il désigne.

L’outil compte aussi le nombre de couches d’encodage d’une valeur, car un payload passé deux fois par JSON.stringify est un bug d’API courant, et illisible.

Le double encodage, et comment le repérer

Une valeur qui a été sérialisée, placée dans un champ texte, puis sérialisée de nouveau arrive sous la forme d’un fouillis d’antislashs. Sérialisée une troisième fois, elle double encore.

Cet outil détecte le nombre de couches et propose de toutes les retirer. La cause habituelle est un service qui stocke un payload sous forme de texte puis le renvoie dans une enveloppe JSON sans l’avoir décodé, ou un client qui appelle stringify sur quelque chose de déjà stringifié.

Ce qu’il signale plutôt que de deviner

Une séquence d’échappement invalide est un avertissement, pas une décision silencieuse. \x41 n’est pas du JSON valide, et un outil qui le transformerait discrètement en A inventerait un sens que le document n’a pas. Vous obtenez la position et une explication, et l’antislash est supprimé pour que le reste du texte survive.

Si le résultat décodé est lui-même du JSON valide, cela est signalé aussi : c’est la façon la plus rapide de confirmer que vous avez fini d’éplucher.

How to do this in code

Déséchapper en code.

js JavaScript
// If the value includes its quotes, parse it as a JSON string
const text = JSON.parse('"line one\\nline two"');

// Peel every layer of encoding
function fullyDecode(value) {
  let out = value;
  for (let i = 0; i < 8 && typeof out === 'string'; i++) {
    try { out = JSON.parse(out); } catch { break; }
  }
  return out;
}
py Python

unicode_escape est la réponse que l’on trouve en premier et elle est fausse pour tout ce qui n’est pas ASCII.

import json

text = json.loads('"line one\\nline two"')

# Standard library, without the surrounding quotes
text = bytes(raw, 'utf-8').decode('unicode_escape')
# Note: unicode_escape assumes Latin-1 for bytes above 127,
# so it mangles non-ASCII. json.loads is the correct route.
sh jq

fromjson est la fonction jq intégrée prévue exactement pour le cas du double encodage.

# Decode a JSON string to raw text
jq -r . <<< '"line one\nline two"'

# Peel a doubly encoded field
jq -r '.payload | fromjson' response.json

Questions fréquentes

Pourquoi ma sortie contient-elle encore des antislashs ?
Parce qu’elle a été encodée plus d’une fois. Activez « retirer toutes les couches », ou relancez l’outil sur sa propre sortie jusqu’à ce que le compte tombe à zéro.
Que signifie un résultat qui est du JSON valide ?
Que la chaîne contenait un document JSON et non du texte brut. C’est le cas du double encodage, et l’outil le dit explicitement.