Aller au contenu principal

Récupérer du JSON échappé

Le déséchappement JSON inverse l’échappement des chaînes : il retransforme \" en guillemet, \n en retour à la ligne et \uXXXX en son caractère, récupérant le document qui était embarqué dans un autre. Il est délibérément tolérant envers les fragments copiés depuis des lignes de journal, qui arrivent généralement amputés de leurs guillemets extérieurs.

100 % local
Chaîne échappée
0 B1 ligneLig. 1, Col. 1
Document récupérélecture seule
0 B1 ligne

Comment fonctionne Récupérer du JSON échappé ?

Vous arrivez presque toujours sur cet outil depuis un fichier de journal. Quelque chose a journalisé un corps de requête en plaçant tout le document JSON dans un unique champ chaîne, et ce que vous regardez est une ligne dense de \" là où devraient se trouver les guillemets, avec des \n au lieu de retours à la ligne et des \\ partout où un chemin Windows est apparu. C’est techniquement lisible et pratiquement pas.

Le déséchappement est l’inverse de l’échappement, et mécaniquement simple : balayez le texte, et chaque fois qu’une barre oblique inversée apparaît, consommez le caractère qui la suit et émettez ce que la paire représente. Tout le discernement réside dans la gestion d’une entrée imparfaite, et elle l’est presque toujours.

Un analyseur JSON strict rejetterait la plupart de ce que les gens collent ici. Le fragment a généralement perdu ses guillemets englobants à cause d’un copier-coller qui n’a retenu que la partie intéressante. Il peut avoir été tronqué par la limite de longueur d’un champ de journal. Il peut contenir une barre oblique inversée qui n’est pas du tout un échappement JSON valide, parce que ce qui l’a produit échappait pour une autre cible. Un analyseur qui refuse tout cela est correct et inutile.

Cet outil est donc tolérant à dessein. Les guillemets extérieurs manquants sont acceptés et signalés plutôt qu’exigés. Un échappement inconnu tel que \q conserve ses deux caractères et déclenche un avertissement. Une barre oblique inversée finale est conservée. Une séquence \u incomplète est laissée telle quelle. Dans tous les cas, le reste du document est quand même récupéré, car une charge utile partiellement récupérée est bien plus utile qu’un message d’erreur.

L’Unicode reçoit le traitement qu’il faut. Un échappement \uXXXX devient son caractère, et une substitution haute suivie d’une substitution basse est recombinée en l’unique caractère qu’elles encodent ensemble — sans cette étape, chaque émoji et chaque glyphe CJK plus rare sort sous forme de deux boîtes de remplacement.

Une fois déséchappé, le résultat est vérifié : s’il s’agit de JSON valide, il est formaté, ce qui est presque toujours ce que vous vouliez au départ. Sinon, il est affiché en texte brut avec l’erreur d’analyse, pour que vous puissiez voir si le document a été tronqué dans le journal ou était cassé avant d’y arriver.

Chaîne échappée

"{\"name\":\"Ada\",\"note\":\"line one\nline two\"}"

Document récupéré

{
  "name": "Ada",
  "note": "line one
line two"
}

Quelles options et quels cas limites Récupérer du JSON échappé prend en charge ?

Référence technique et options
ParamètreTypeValeur par défautComportement et cas limites
\" \\ \/échappement—Guillemets, antislash et barre oblique. L’échappement de la barre oblique est légal mais optionnel en JSON, il apparaît donc dans la sortie de certains producteurs et pas d’autres.
\n \r \t \b \féchappement—Les caractères de contrôle nommés. \n est celui qui fait la différence entre un bloc de texte et un document lisible.
\uXXXXéchappement—Une unité de code UTF-16. un surrogate haut suivi d’un surrogate bas est recombiné en le seul caractère qu’il code ; sans cela, chaque emoji et de nombreux caractères CJK reviennent comme deux boîtes cassées.
Guillemets entourantsoptionnelssupprimés s'ils sont présentsUn fragment collé depuis une ligne de log les a généralement perdus. Leur présence est signalée plutôt qu’exigée.
Échappement inconnuconservé + avertissement—\q et similaires conservent les deux caractères. Un analyseur strict rejette l’ensemble du document ; continuer permet de récupérer le reste, qui est ce pour quoi vous êtes venu.
Surrogate isoléconservé + avertissement—Un surrogate haut sans moitié basse ne peut former un caractère. Il est conservé et marqué, car cela signifie généralement que la source a été tronquée en plein milieu d’un caractère.
Mise en forme (pretty-print)booléentrueRe-indente lorsque le texte récupéré est du JSON valide. Quand il ne l’est pas, le texte brut est affiché avec l’erreur d’analyse, ce qui distingue un champ de journal tronqué d’un document déjà corrompu.

Questions fréquentes

Ma ligne de journal est doublement échappée. Dois-je passer l’outil deux fois ?

Oui. Le double échappement se produit quand une chaîne déjà échappée est échappée à nouveau — une charge utile journalisée comme chaîne, puis cette ligne de journal journalisée comme chaîne par un agrégateur. Vous verrez \\\" là où \" devrait se trouver. Repassez la sortie dans l’outil et la deuxième couche part. Si le résultat paraît identique après un passage, vous êtes arrivé au fond.

Pourquoi le résultat n’est-il toujours pas du JSON valide ?

Généralement, une troncature. Les champs de journal ont des limites de longueur, si bien que le document est souvent coupé au milieu d’une chaîne ou d’un objet, et le déséchapper fidèlement produit quelque chose qui ne peut pas s’analyser parce qu’il est réellement incomplet. L’erreur d’analyse nomme la ligne et la colonne où elle s’arrête, ce qui tombe normalement exactement au point de troncature.

Où sont passés mes émojis ?

S’ils ont survécu, la paire de substitution a été recombinée correctement. Si un outil affiche deux boîtes à la place, il a décodé chaque moitié \uXXXX indépendamment — les caractères hors du plan multilingue de base s’encodent sur deux unités de code et doivent être joints. Cet outil les joint, et avertit quand il trouve une moitié isolée, ce qui signale une troncature.

Puis-je coller du texte qui n’est pas du JSON ?

Oui. Le déséchappement est textuel, donc une requête SQL échappée, un fragment HTML échappé ou une commande shell échappée se déséchappent sans problème. Il signalera simplement que le résultat n’est pas du JSON valide et l’affichera en texte brut au lieu de le formater.

La ligne de journal que je colle est-elle envoyée quelque part ?

Non. Le déséchappement s’exécute dans votre navigateur. C’est plus important ici que pour la plupart des outils : les lignes de journal que les gens déséchappent sont souvent des corps de requêtes de production contenant des jetons, des identifiants de session et des fiches clients, et en coller une dans un outil côté serveur la copie dans un second journal d’accès.

Le déséchappement change-t-il les caractères, ou seulement leur écriture ?

Seulement leur écriture. \u00e9 et é sont deux orthographes d’un même caractère, et le déséchappement réécrit l’orthographe — ce qui sort est exactement le texte que la forme échappée encodait. C’est aussi pourquoi la sortie ressemble parfois à l’entrée : une ligne de journal où rien n’est échappé n’a rien à changer.