Zum Inhalt springen
jsonbeautifiers
Deutsch

JSON escapen

Verwandelt beliebigen Text in eine Zeichenkette, die sicher in JSON eingebettet werden kann.

Text
Escapt

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

Beliebigen Text in etwas verwandeln, das sicher in einer JSON-Zeichenkette stehen kann. Anführungszeichen, Backslashes, Zeilenumbrüche, Tabulatoren und Steuerzeichen werden escapt, alles andere bleibt unangetastet.

Das ist die Operation, die Sie brauchen, wenn Sie von Hand ein Payload, eine Logzeile, eine SQL-Abfrage oder ein HTML-Fragment in ein JSON-Feld einbetten.

Was escapt werden muss und was nicht

JSON definiert genau neun Escape-Sequenzen und verlangt Escaping in genau drei Situationen.

Das doppelte Anführungszeichen
Wird zu \". Es würde sonst die Zeichenkette beenden.
Der Backslash
Wird zu \\. Er würde sonst ein Escape beginnen.
Steuerzeichen, U+0000 bis U+001F
Ein Zeilenumbruch wird zu \n, ein Tabulator zu \t, ein Wagenrücklauf zu \r, ein Backspace zu \b, ein Seitenvorschub zu \f. Alles andere in diesem Bereich nimmt die Form \uXXXX an.
Der Schrägstrich
Darf als \/ escapt werden, muss aber nicht. Beide Formen meinen dasselbe Zeichen. Das Escape existiert, damit JSON in einem HTML-script-Element stehen kann, wo die Folge </ es beenden würde.
Nicht-ASCII-Zeichen
Brauchen überhaupt kein Escaping. JSON ist UTF-8, und é, 你 und 🎉 sind alle wörtlich zulässig. Sie hier zu escapen ist eine Option für Systeme, die Nicht-ASCII unterwegs zerstören.
Das einfache Anführungszeichen
Braucht nichts. Innerhalb einer Zeichenkette in doppelten Anführungszeichen ist es ein gewöhnliches Zeichen, und \' ist kein gültiges JSON-Escape.

Surrogate und Emoji

Ein Zeichen außerhalb der Basic Multilingual Plane - dazu gehört jedes Emoji - wird als zwei UTF-16-Codeeinheiten gespeichert. Beim Escapen entstehen daraus zwei \u-Sequenzen, etwa \ud83c\udf89 für eine Partytröte. Das ist korrekt, und jeder Parser setzt das Zeichen wieder zusammen.

Ein einzelnes Surrogat, die Hälfte eines solchen Paares ohne Partner, wird hier immer escapt, auch wenn sonst nichts escapt wird: Wörtlich ausgegeben ergibt es Text, der kein wohlgeformtes Unicode ist und beim erneuten Kodieren nach UTF-8 kaputtgeht.

Die meistens bessere Antwort

Wenn Sie von Hand escapen, um JSON zu bauen, hören Sie auf und serialisieren Sie stattdessen. JSON.stringify, json.dumps und ihre Entsprechungen escapen jeden Wert konstruktionsbedingt korrekt, und sie können keinen vergessen.

Von Hand gebautes JSON ist die eigentliche Ursache fast jedes Fehlers über ungültige Steuerzeichen und nicht beendete Zeichenketten, den es gibt.

How to do this in code

Escapen im Code.

js JavaScript
// Escaped and quoted
const quoted = JSON.stringify(text);

// Escaped without the surrounding quotes
const escaped = JSON.stringify(text).slice(1, -1);
py Python
import json

quoted = json.dumps(text)                      # with quotes, non-ASCII escaped
quoted = json.dumps(text, ensure_ascii=False)  # with quotes, é stays é
escaped = json.dumps(text)[1:-1]
sh Shell
# jq's @json filter escapes and quotes
printf '%s' "$text" | jq -Rs @json

# -R reads raw input, -s slurps it into one string
go Go
b, _ := json.Marshal(text)   // includes the quotes

// Marshal escapes <, > and & by default for HTML safety.
// To turn that off you need an Encoder:
var buf bytes.Buffer
enc := json.NewEncoder(&buf)
enc.SetEscapeHTML(false)
enc.Encode(text)

Häufige Fragen

Muss ich einfache Anführungszeichen escapen?
Nein. Innerhalb einer JSON-Zeichenkette in doppelten Anführungszeichen ist ein Apostroph ein gewöhnliches Zeichen, und \' ist überhaupt kein gültiges JSON-Escape. In JavaScript und JSON5 ist es eines, daher kommt die Gewohnheit.
Soll ich Nicht-ASCII-Zeichen escapen?
Normalerweise nicht. JSON ist UTF-8, und Zeichen mit Akzenten, CJK und Emoji sind alle wörtlich zulässig. Escapen Sie sie nur, wenn irgendetwas in der Verarbeitungskette Nicht-ASCII zerstört - und das ist ein Grund, die Kette zu reparieren.
Und ein Windows-Pfad?
Jeder Backslash verdoppelt sich: C:\\Users\\priya. Ein Pfad, der auf einen einzelnen Backslash endet, ist schlimmer als falsch: Er escapt das schließende Anführungszeichen und verschluckt den Rest Ihres Dokuments.