JSON unescapen
Holt lesbares JSON aus einer escapten Zeichenkette zurück, egal wie viele Schichten tief.
Nichts, was Sie einfügen, verlässt Ihren Browser. Die connect-src Erlaubnisliste macht daraus eine Garantie des Browsers statt eines Versprechens. Selbst überprüfen
Nehmen Sie eine escapte JSON-Zeichenkette und holen Sie den ursprünglichen Text zurück. Umgebende Anführungszeichen werden entfernt, sofern vorhanden, Escape-Sequenzen werden dekodiert, und aus \uXXXX wird das Zeichen, das es benennt.
Außerdem wird gezählt, wie viele Kodierungsschichten ein Wert hat, denn ein Payload, das zweimal durch JSON.stringify gegangen ist, ist ein verbreiteter API-Fehler - und ein unlesbarer.
Doppelte Kodierung, und wie man sie erkennt
Ein Wert, der serialisiert, in ein Textfeld gelegt und erneut serialisiert wurde, kommt als Wust von Backslashes an. Ein drittes Mal serialisiert verdoppelt er sich wieder.
Dieses Werkzeug erkennt die Zahl der Schichten und bietet an, alle abzutragen. Die übliche Ursache ist ein Dienst, der ein Payload als Text speichert und es dann in einem JSON-Umschlag zurückgibt, ohne es vorher zu dekodieren - oder ein Client, der stringify auf etwas bereits Stringifiziertes anwendet.
Was gemeldet statt geraten wird
Eine ungültige Escape-Sequenz ist eine Warnung, keine stillschweigende Entscheidung. \x41 ist kein gültiges JSON, und ein Werkzeug, das daraus leise ein A machte, würde eine Bedeutung erfinden, die das Dokument nicht hat. Sie bekommen die Position und eine Erklärung, und der Backslash wird verworfen, damit der restliche Text überlebt.
Ist das dekodierte Ergebnis selbst gültiges JSON, wird auch das gemeldet - der schnellste Weg festzustellen, dass Sie fertig abgetragen haben.
How to do this in code
Unescapen im 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 ist die Antwort, die man zuerst findet, und sie ist für alles jenseits von ASCII falsch.
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 ist die eingebaute jq-Funktion für genau den doppelt kodierten Fall.
# Decode a JSON string to raw text
jq -r . <<< '"line one\nline two"'
# Peel a doubly encoded field
jq -r '.payload | fromjson' response.json Häufige Fragen
- Warum enthält meine Ausgabe immer noch Backslashes?
- Weil sie mehr als einmal kodiert wurde. Schalten Sie „alle Schichten abtragen“ ein, oder lassen Sie das Werkzeug erneut über seine eigene Ausgabe laufen, bis der Zähler null erreicht.
- Was heißt es, wenn das Ergebnis gültiges JSON ist?
- Dass die Zeichenkette ein JSON-Dokument enthielt und keinen einfachen Text. Das ist der Fall doppelter Kodierung, und das Werkzeug sagt es ausdrücklich.