Échapper du JSON comme littéral de chaîne (et décoder du JSON doublement encodé)

Stringifier du JSON l’entoure de guillemets et échappe les guillemets internes et les caractères spéciaux, produisant un littéral de chaîne JSON sûr à embarquer ailleurs.

Ce que signifie « stringifier en littéral »

Passer une chaîne JSON à JSON.stringify la met entre guillemets doubles et échappe les guillemets internes et les antislashes, produisant une seule valeur de chaîne qu’on peut embarquer sans risque.

Pourquoi vous en avez besoin

Embarquer du JSON dans un autre champ JSON, stocker du JSON dans une colonne de type chaîne en base, ou passer du JSON via une variable d’environnement ou un paramètre d’URL nécessite un littéral de chaîne échappé.

Règles d’échappement

Les guillemets doubles sont échappés par un antislash, les antislashes sont doublés, et les caractères de contrôle comme le saut de ligne ou la tabulation deviennent des séquences d’échappement à deux caractères. Le résultat ne contient aucun saut de ligne brut.

Décoder du JSON doublement encodé

Si vous recevez une chaîne qui commence par un guillemet échappé et contient des séquences de guillemets échappés, elle a été stringifiée. Faites un parse une fois pour récupérer la chaîne JSON interne, puis un autre parse pour obtenir la vraie valeur.

Où apparaît le double encodage

Les frameworks de logging qui sérialisent les objets de contexte, les payloads de webhook qui mettent un corps JSON dans un champ 'body', les files de messages qui transportent des « enveloppes JSON-en-chaîne », et les colonnes de base typées text ou varchar sont les sources les plus courantes. Cherchez un guillemet en tête suivi d’un nombre pair d’antislashes.

Travailler avec du JSON embarqué dans les logs

Les loggers structurés stringifient souvent les objets pour qu’une ligne de log reste une seule valeur. Pour inspecter, extrayez la ligne du visualiseur, désechappez avec JSON.parse, puis formatez le JSON récupéré. Évitez de grepper un objet JSON multi-lignes — un JSON stringifié sur une ligne se cherche bien plus facilement.

Outils pour l’aller-retour

Console du navigateur : JSON.parse(line) renvoie le JSON interne, puis JSON.stringify(...,null,2) le met en forme. CLI Node : 'node -e "console.log(JSON.parse(process.argv[1]))" "<line>"' fait les deux étapes. L’outil JSON Stringify de ce site gère des imbrications arbitrairement profondes en un clic.