Ce que fait cet outil
Un littéral de chaîne JSON devient le texte qu’il représente. "caf\u00e9" donne café, "deux\nlignes" donne deux lignes, et "\ud83d\ude00" donne l’emoji — une paire de substitution fait un caractère, pas deux moitiés cassées.
Les guillemets sont optionnels
Les deux formes fonctionnent :
"caf\u00e9"
caf\u00e9
C’est délibéré. Une chaîne JSON arrive rarement avec ses guillemets intacts : on la copie d’une ligne de journal, d’un git diff, d’une trace d’appels, d’un message d’erreur qui n’a cité que l’intérieur. Exiger les guillemets reviendrait à les remettre à la main chaque fois.
Le prix à payer est modeste, et il se dit clairement : une entrée nue qui se trouve être du JSON valide d’une autre nature — [1,2], null — est lue comme du texte, parce que c’est ce que signifie un fragment nu ici. Seule une entrée entre guillemets est analysée comme un littéral.
Un refus dit quoi et où
Une entrée qui n’est pas une chaîne JSON est refusée plutôt que décodée à moitié, et le message nomme la cause :
| Entrée | Message |
|---|---|
a"b | Unescaped quotation mark at position 1: write it as \" |
"ab\q" | Unknown escape "\q" at position 3 |
"a\u12" | Invalid \u escape at position 2: four hexadecimal digits expected |
"abc | The opening quotation mark has no closing quotation mark |
{"a":1} | Expected a JSON string, found a JSON object |
Les positions comptent à partir de zéro et désignent le texte que vous avez collé : le nombre vous mène au caractère.
Cela mérite d’être dit parce qu’il en allait autrement : chacun de ces cas produisait l’unique message Invalid JSON string escape sequence. Un objet collé n’est pas une faute d’échappement, et s’entendre dire le contraire envoie chercher au mauvais endroit. C’était un vrai défaut de cet outil, trouvé en écrivant cette page et corrigé.
Rien n’est deviné
Un échappement inconnu est une erreur, pas un caractère. \q n’est pas du JSON valide, et décider qu’il « voulait sans doute dire q » vous rendrait un texte subtilement différent de ce que la source contenait — le genre d’écart qui ressort trois systèmes plus loin.
Confidentiel par conception
Tout s’exécute localement dans votre navigateur en JavaScript. Vos données ne sont jamais envoyées sur un serveur, ce qui rend l’outil sûr pour des contenus sensibles, et il fonctionne hors ligne.