JSON als String-Literal escapen (und doppelt kodiertes JSON dekodieren)

Stringify auf JSON umschließt es mit Anführungszeichen und escaped die inneren Anführungszeichen und Sonderzeichen, sodass ein JSON-String-Literal entsteht, das sicher woanders eingebettet werden kann.

Was «zum Literal stringifizieren» bedeutet

JSON.stringify auf einem JSON-String packt ihn in doppelte Anführungszeichen und escaped die inneren Anführungszeichen und Backslashes — Ergebnis ist ein einziger String-Wert, der sicher eingebettet werden kann.

Warum du das brauchst

JSON in ein anderes JSON-Feld einzubetten, JSON in einer String-Spalte einer Datenbank zu speichern oder JSON als Umgebungsvariable oder URL-Parameter zu übergeben — all das verlangt ein escapetes String-Literal.

Escape-Regeln

Doppelte Anführungszeichen werden mit Backslash escaped, Backslashes werden verdoppelt, und Steuerzeichen wie Zeilenumbruch oder Tab werden zu ihrer Zweizeichen-Escape-Sequenz. Das Ergebnis enthält keine echten Zeilenumbrüche.

Doppelt kodiertes JSON dekodieren

Bekommst du einen String, der mit einem escapeten Anführungszeichen beginnt und solche Sequenzen enthält, wurde er stringifiziert. Parse ihn einmal, um den inneren JSON-String zu erhalten, und dann erneut, um den eigentlichen Wert zu bekommen.

Wo Doppelkodierung auftaucht

Logging-Frameworks, die Context-Objekte serialisieren, Webhook-Payloads, die einen JSON-Body in einem 'body'-Feld kapseln, Message-Queues mit «JSON-als-String»-Umschlägen und Datenbankspalten vom Typ text oder varchar sind die häufigsten Quellen. Achte auf ein führendes Anführungszeichen plus eine gerade Anzahl Backslashes.

Mit eingebettetem JSON in Logs arbeiten

Strukturierte Logger stringifizieren Objekte oft, damit jede Log-Zeile ein einzelner Wert bleibt. Zum Inspizieren ziehst du die Zeile aus dem Log-Viewer, baust das Escaping mit JSON.parse zurück und formatierst dann das wiedergewonnene JSON. Greppe keine mehrzeiligen JSON-Objekte — auf eine Zeile stringifiziertes JSON ist viel leichter zu durchsuchen.

Werkzeuge für den Roundtrip

Browser-Konsole: JSON.parse(line) liefert das innere JSON, dann JSON.stringify(...,null,2) zum Pretty-Print. Node-CLI: 'node -e "console.log(JSON.parse(process.argv[1]))" "<line>"' macht beides. Das JSON-Stringify-Tool auf dieser Seite kümmert sich in einem Klick um beliebig tief verschachtelte Werte.