JSON-String-Escape / -Unescape
JSONJSON-Strings escapen und unescapen — Anführungszeichen, Steuerzeichen und \uXXXX.
Auf dieser Seite
Was ist das Escapen von JSON-Strings?#
Innerhalb eines JSON-Dokuments muss ein String zwischen doppelten Anführungszeichen stehen — und das schafft ein Problem, sobald der Text selbst ein Anführungszeichen, einen Zeilenumbruch oder einen Backslash enthält. Würde man sie roh einsetzen, sähe der Parser das schließende Anführungszeichen zu früh oder hielte \ für den Beginn eines Escapes, den er nicht versteht. Escapen ist das Ersetzen dieser Zeichen durch die kurzen Backslash-Folgen, die die JSON-Spezifikation definiert: \" für ein Anführungszeichen, \\ für einen Backslash, \n für einen Zeilenumbruch, \t für einen Tabulator und einige wenige mehr. Unescapen ist die Umkehrung — diese Folgen werden zurück in die ursprünglichen Zeichen verwandelt.
Es gibt einen zweiten, härteren Modus. Einige alte Systeme — ältere Log-Shipper, restriktive Datenbanken, Transportschichten, die reinen ASCII-Text annehmen — verschlucken sich an jedem Byte über 127. Für diese erlaubt JSON zusätzlich, jedes Nicht-ASCII-Zeichen als \uXXXX zu schreiben (und astrale Zeichen wie Emoji als UTF-16-Surrogatpaar). Der Text bleibt gültiges JSON; er besteht nach dem Escapen lediglich vollständig aus ASCII.
Diese Seite beherrscht beide Richtungen und beide Modi: einen rohen String in ein gültiges JSON-String-Literal escapen oder ein Literal zurück in seinen Ursprungstext unescapen — mit einem optionalen Schalter Nur ASCII-Ausgabe, der jeden Nicht-ASCII-Codepunkt in die \uXXXX-Form zwingt.
Verwendung#
- Wählen Sie die Richtung mit dem Umschalter Kodieren / Dekodieren oben links auf der Werkzeugleiste. Kodieren wandelt rohen Text in ein JSON-Literal um; Dekodieren wandelt ein Literal zurück in Text um.
- Tippen Sie in die Eingabe-Fläche links oder fügen Sie ein.
- Beim Kodieren wird der gesamte Text zu einem JSON-String-Literal (einschließlich der umschließenden Anführungszeichen).
- Beim Dekodieren können Sie entweder ein Literal mit Anführungszeichen (
"a\nb") oder nur den bloßen escapeten Rumpf (a\nb) einfügen — das Werkzeug setzt die Anführungszeichen für Sie hinzu. Eine gültige JSON-Zahl, ein boolescher Wert oder ein Objekt wird als „kein String“ abgelehnt, statt stillschweigend umgewandelt zu werden.
- Setzen Sie den Haken bei Nur ASCII-Ausgabe (\uXXXX) (Modus Kodieren), wenn der downstream-Verbraucher keine Nicht-ASCII-Bytes verarbeiten kann. Astrale Zeichen wie Emoji werden als korrektes Surrogatpaar ausgegeben, genau wie es
JSON.stringifytun würde. - Das Ergebnis erscheint live in der Ausgabe-Fläche. Klicken Sie auf Kopieren, um es zu übernehmen.
- Beispiel legt einen mehrsprachigen Demonstrationsstring ein; Leeren setzt beide Flächen zurück.
Eckpunkte#
- Spezifikationsexakte Kurzformen. Verwendet genau die Folgen, die RFC 8259 verlangt (
\",\\,\b,\f,\n,\r,\t) und\uXXXXfür alles andere unter 0x20 — bytegenau wieJSON.stringify. - Echter Nur-ASCII-Modus. Nicht-ASCII-Zeichen werden nicht stillschweigend fallengelassen oder als Mojibake ausgegeben; jedes wird als
\uXXXXausgegeben, und astrale Zeichen (über U+FFFF) werden zu einem korrekten UTF-16-Surrogatpaar, nicht zu einer kaputten einzelnen Code-Einheit, die Dekodierer ablehnen würden. - Tolerantes Unescapen. Akzeptiert sowohl ein vollständiges Literal mit Anführungszeichen als auch einen bloßen escapeten Rumpf, sodass auch halb eingefügte Fragmente aus einer Log-Zeile noch dekodiert werden, statt einen Fehler zu werfen.
- Verweigert sich zu raten. Wenn die dekodierte Eingabe gültiges JSON, aber kein String ist (zum Beispiel eine bloße Zahl oder ein Array), teilt das Werkzeug das mit, statt es heimlich zu stringifizieren.
Konkretes Beispiel#
Laden Sie Beispiel im Modus Kodieren und die Eingabe ist ein String, der absichtlich Anführungszeichen, einen Backslash-Pfad, einen Zeilenumbruch, ein Copyright-Zeichen, ein Emoji und Chinesisch mischt:
He said "hi"
\path\ © 🌍 你好
Ohne Nur ASCII-Ausgabe behält das escapete Literal die lesbaren Zeichen unverändert bei und escapet nur, was escapet werden muss:
"He said \"hi\"\n\\path\\ © 🌍 你好"
Aktivieren Sie nun Nur ASCII-Ausgabe (\uXXXX) und dieselbe Eingabe wird zu reinem ASCII — das Copyright-Zeichen kollabiert zur vierstelligen Form \u00a9, das Globus-Emoji zum Surrogatpaar \ud83c\udf0d und jedes chinesische Zeichen zu seinem eigenen Codepunkt (\u4f60, \u597d):
"He said \"hi\"\n\\path\\ \u00a9 \ud83c\udf0d \u4f60\u597d"
Wechseln Sie zu Dekodieren und fügen Sie eines dieser Literale wieder ein: der Ursprungstext — inklusive Emoji und Chinesisch — wird exakt wiederhergestellt.
FAQ#
Warum wird das Emoji zu zwei \u-Codes statt zu einem?#
Zeichen über U+FFFF (Emoji, seltene CJK-Erweiterungen, einige mathematische Symbole) passen nicht in eine einzige 16-Bit-Code-Einheit, deshalb stellt UTF-16 sie als Surrogatpaar dar — ein High-Surrogate gefolgt von einem Low-Surrogate. Das Globus-Emoji 🌍 (U+1F30D) wird zu \ud83c\udf0d. Würde man nur ein einziges \u ausgeben, entstünde ungültiges JSON, das strenge Dekodierer ablehnen; dieses Werkzeug gibt das Paar genau so aus, wie es JSON.stringify tut, sodass die Ausgabe sauber round-trippt.
Dekodieren sagt „Eingabe ist kein JSON-String.“ Was habe ich eingefügt?#
Sie haben etwas eingefügt, das gültiges JSON, aber kein String ist — typischerweise eine bloße Zahl (42), ein boolescher Wert (true) oder ein Objekt/Array. Das Werkzeug verweigert sich, es zu stringifizieren, weil das einen echten Fehler verdecken würde (Sie wollten fast sicher den String-Wert einfügen, nicht das gesamte Dokument). Schließen Sie Ihren Text in Anführungszeichen ein und versuchen Sie es erneut.
Behandelt das auch Steuerzeichen wie einen literalen Tabulator oder Bell?#
Ja. Ein literaler Tabulator in der Eingabe wird zu \t, ein Backspace zu \b, ein Form Feed zu \f, ein Carriage Return zu \r; jeder andere Steuercode unter U+0020 (einschließlich Bell, 0x07) wird zu einer \u0007-ähnlichen Form. Das ist wichtig, weil rohe Steuerzeichen innerhalb von JSON-Strings unzulässig sind und manche Parser sie rundweg ablehnen.
Ist die Nur-ASCII-Ausgabe „sicherer“?#
Nur für eine bestimmte Art von Sicherheit: eine Transportschicht zu überstehen, die Nicht-ASCII-Bytes verfälscht oder ablehnt. Es ist keine Sicherheitsmaßnahme — die Daten sind weiterhin offensichtlich umkehrbar, nur in einem eingeschränkteren Alphabet ausgedrückt. Verwenden Sie es, wenn ein Verbraucher ASCII verlangt; lassen Sie es sonst aus, da die lesbare Form viel leichter zu debuggen ist.