JSON in String umwandeln
Dieses Tool macht aus einem JSON-Dokument ein JSON-Stringliteral – die escapte, in Anführungszeichen gesetzte Form, die Sie brauchen, um ein Payload in ein anderes einzubetten. Anführungszeichen, Backslashes und Steuerzeichen werden in einem einzigen Durchlauf escapet, sodass die doppelte Escapung, die verkettetes Suchen-und-Ersetzen produziert, gar nicht erst entstehen kann.
Wie funktioniert JSON in String umwandeln?
Diese Operation steckt hinter einer wiederkehrenden, unspektakulären Aufgabe: ein Payload in ein anderes einzubetten. Ein Request-Body in einer Webhook-Definition. Ein Fixture in einer Testdatei. Ein Konfigurationsdokument im Wert einer Kubernetes ConfigMap. Eine Beispiel-Antwort in einem OpenAPI-Beispielfeld. In jedem Fall muss das innere Dokument im äußeren zu einem String werden – das heißt, jedes Anführungszeichen, jeder Backslash und jeder Zeilenumbruch darin muss escapet werden.
Von Hand erledigt man das mit Suchen-und-Ersetzen, und es geht auf eine bestimmte, vorhersehbare Weise schief. Ersetzen Sie erst die Anführungszeichen und dann die Backslashes, wird der Backslash, den Sie gerade vor jedes Anführungszeichen gesetzt haben, ein zweites Mal escapet: Sie wollten \" und haben \\", was als literaler Backslash gefolgt vom Ende des Strings geparst wird. Das Dokument scheint zu funktionieren – bis irgendwo darin ein Anführungszeichen auftaucht.
Escapen in einem einzigen Zeichendurchlauf macht das unmöglich. Jedes Zeichen wird genau einmal gelesen und einmal abgebildet – " zu \", \ zu \\, Newline zu \n, Tab zu \t – ohne jede Gelegenheit, dass ein späterer Durchlauf die Ausgabe eines früheren erneut verarbeitet.
RFC 8259 verlangt, dass jedes Steuerzeichen unterhalb von U+0020 escapet wird; alles ohne Kurzform wird daher zu einer \u-Sequenz. Nicht-ASCII-Zeichen bleiben standardmäßig unangetastet, denn modernes JSON ist UTF-8, und sie zu escapen macht das Ergebnis nur größer und unleserlicher. Wenn ein Ziel wirklich reines ASCII braucht – eine ältere Log-Pipeline, ein System, das High Bytes verfälscht –, escapet die Option sie und erzeugt für alles außerhalb des Basic Multilingual Plane korrekt ein Surrogate-Pair, denn ein einzelnes \u kann keinen Emoji darstellen, und gibt man trotzdem eines aus, wird er abgeschnitten.
Standardmäßig wird die Eingabe zuerst als JSON validiert. Etwas Kaputtes zu escapen erzeugt ein Stringliteral, das für sich genommen gültig ist, dessen Inhalt sich aber später an einer deutlich ungünstigeren Stelle nicht mehr parsen lässt. Schalten Sie das ab, um beliebigen Text zu escapen – praktisch für Logzeilen und Shell-Snippets.
Dokument
{"name":"Ada","note":"line one
line two"}Stringliteral
"{\"name\":\"Ada\",\"note\":\"line one\nline two\"}"Welche Optionen und Sonderfälle unterstützt JSON in String umwandeln?
| Parameter | Typ | Standard | Verhalten & Sonderfälle |
|---|---|---|---|
| In Anführungszeichen | Boolesch | true | Gibt die umgebenden doppelten Anführungszeichen aus, damit das Ergebnis ein vollständiger JSON-String ist. Schalten Sie es aus, wenn Sie in ein bereits vorhandenes Anführungszeichenpaar einfügen. |
| Nicht-ASCII escapen | Boolesch | false | Wandelt jeden Codepoint über U+007E in \uXXXX um. Unnötig für UTF-8-Ziele, es bloatet die Ausgabe. Astral-Zeichen geben korrekterweise ein Surrogatpaar aus, anstatt eines abgeschnittenen einzelnen Escapes. |
| Schrägstriche escapen | Boolesch | false | Schreibt / als \/. Gültiges JSON, erforderlich von einigen Log-Shippern und von JSON, das in HTML-<script>-Blöcken eingebettet ist, wo </script> sonst das Element vorzeitig beenden würde. |
| Gültiges JSON verlangen | Boolesch | true | Validiert vor dem Escapen, damit der Literal garantiert wieder in das Dokument geparst werden kann, mit dem Sie begonnen haben. Ausgeschaltet, es escapet beliebigen Text – nützlich für Log-Zeilen und Shell-Snippets. |
| Steuerzeichen | immer escaped | — | RFC 8259 verbietet rohe Zeichen unter U+0020 in einem String. \n \r \t \b \f verwenden ihre Kurzformen; alles andere wird zu \u00XX. |
| Größenwachstum | ≈ 5–30% | — | Hängt vollständig davon ab, wie viele Anführungszeichen und Backslashes die Eingabe enthält. Ein JSON-Dokument, das hauptsächlich aus Anführungszeichen besteht, wächst mehr als Prosa. |
Häufig gestellte Fragen
Was ist der Unterschied zwischen diesem Tool und JSON.stringify in JavaScript?
JSON.stringify nimmt einen JavaScript-Wert und erzeugt JSON-Text. Dieses Tool nimmt JSON-Text und erzeugt ein JSON-Stringliteral, das ihn enthält – genau das macht JSON.stringify(someJsonText), wenn man ihm einen String übergibt. Der Unterschied zählt: Stringifiziert man ein Objekt, erhält man {"a":1}; stringifiziert man den Text {"a":1}, erhält man "{\"a\":1}". Dieses Tool macht Letzteres.
Warum ist mein von Hand escaptes JSON kaputtgegangen?
Fast immer ein Reihenfolgenfehler. Ersetzt man Anführungszeichen vor Backslashes, wird der Backslash, den jede Ersetzung gerade erst eingeführt hat, doppelt escapet – aus \" wird \\" , und der String endet vorzeitig. Es funktioniert, bis das Dokument ein Anführungszeichen enthält – und bei JSON ist das sofort der Fall. Genau ein Mal je Zeichen scannen, wie es dieses Tool tut, schließt diese Möglichkeit aus.
Wie mache ich das wieder rückgängig?
Benutzen Sie „JSON-Escapes auflösen“, das das Literal entgegennimmt und das Dokument zurückgibt. Es ist bewusst tolerant: Es kommt auch mit einem Fragment zurecht, das seine umgebenden Anführungszeichen verloren hat – der Normalzustand von allem, was man aus einer Logzeile oder einem Stack-Trace kopiert.
Sollte ich Schrägstriche escapen?
In der Regel nicht. JSON erlaubt \/ , aber kein Parser verlangt es. Die zwei Fälle, in denen es darauf ankommt: JSON, das direkt in einem HTML-<script>-Block eingebettet ist, wo ein wörtliches </script> innerhalb eines Strings das Element vorzeitig beenden würde – und einige Log-Shipper, die die escapte Form erwarten.
Wird mein Payload irgendwohin gesendet?
Nein. Das Escapen passiert in diesem Browser-Tab. Die Dokumente, die Leute in andere Dokumente einbetten, sind meist Fixtures, API-Bodies und Konfigurationen – genau das Material, das nicht durch einen unbekannten Server wandern sollte, nur damit seine Anführungszeichen geändert werden.
Warum bricht mein escapter String, wenn ich ihn in einen Shell-Befehl einfüge?
Weil zwei Quoting-Ebenen im Spiel sind und nur eine davon die von JSON ist. Dieses Tool erzeugt ein gültiges JSON-Stringliteral; die Shell legt danach ihre eigenen Regeln an alles an, was Sie einfügen, und ein doppeltes Anführungszeichen, das JSON als \" geschrieben hat, ist für bash weiterhin ein doppeltes Anführungszeichen. Setzen Sie den ganzen Wert in einfache Anführungszeichen, oder schreiben Sie ihn in eine Datei und übergeben Sie den Dateipfad.
Welche verwandten Tools sollten Sie als Nächstes nutzen?
- JSON in CSV umwandelnDatensätze in eine Tabelle umwandeln, Verschachtelung inklusive
- CSV in JSON umwandelnTabellen-Export in Datensätze umwandeln, Anführungszeichen inklusive
- JSON-Escapes auflösenEin Dokument aus Maskierungen in einer Logzeile zurückholen
- JSON in TypeScript umwandelnInterfaces aus einem Beispiel erzeugen, Optionalität inklusive