Deutsch

Entwicklertools · JSON Formatierer und Validator

JSON String-Escapes erklärt: \n, \uXXXX und Steuerzeichen

· Wie es funktioniert

json Entwickler-Workflow Validierung

JSON String-Escapes erklärt: \n, \uXXXX und Steuerzeichen, dargestellt mit JSON-Tokens und einer präzisen Validierungsgrenze
Original-ToolAcre-Vektorillustration

Ein roher Zeilenumbruch innerhalb einer JSON-Zeichenfolge ist ungültig, ebenso wie ein Tabulator. In diesem Beitrag werden die acht Escape-Sequenzen behandelt, wie \u-Escapes und Ersatzzeichenpaare funktionieren und warum ein eingefügter Absatz eine ganze Datei ungültig machen kann.

Der Absatz, der die Nutzlast beschädigt hat

Der Absatz, der die Nutzlast unterbrochen hat – durch Einfügen eines sichtbaren Zeilenumbruchs in eine Beschreibung in Anführungszeichen wird ein Steuerzeichen direkt in die Zeichenfolge JSON eingefügt. Die erste Zeile sieht vollständig aus, aber das Eröffnungszitat erwartet noch String-Inhalt oder ein Schlusszitat. Wenn der Parser den Rohzeilenvorschub erreicht, stoppt er dort, da JSON-Zeichenfolgen auf diese Weise keine physischen Zeilen umfassen können. Der Text muss das zweistellige Escape-Zeichen `\n` enthalten, wenn der decodierte Wert eine neue Zeile benötigt.

Aus einem Dokument oder einer Tabellenkalkulation kopierte Tabulatoren verursachen die gleiche Fehlerklasse, auch wenn ein Editor sie möglicherweise als harmlose Leerzeichen darstellt. Ersetzen Sie einen Literal-Tabulator durch `\t`, einen Wagenrücklauf durch `\r` und andere verbotene Steuerelemente durch ihre benannten oder Unicode-Escapezeichen.

Die acht Escapes, die JSON zulässt

Die acht Escapezeichen JSON erlauben – nach einem Backslash sind die Kurzformen `"`, `\\`, `\/`, `\b`, `\f`, `\n`, `\r` und `\t`. Sie stellen Anführungszeichen, Backslash, Schrägstrich, Rücktaste, Seitenvorschub, Zeilenvorschub, Wagenrücklauf und horizontale Tabulatorzeichen dar. Ein Schrägstrich kann auch ohne Escapezeichen angezeigt werden. `\/` existiert hauptsächlich aus Kompatibilitätsgründen mit Kontexten, die einmal eine schließende Skriptsequenz speziell behandelt haben.

Nach einem Backslash JSON darf kein anderer Buchstabe folgen. Aus Programmiersprachen bekannte Sequenzen wie `\v`, `\0`, `\x41` oder ein Backslash gefolgt von einem physischen Zeilenumbruch sind hier ungültig. Verwenden Sie `\u` gefolgt von genau vier hexadezimalen Ziffern, wenn kein kurzes Escape vorhanden ist. Dieses kleine feste Vokabular hält JSON-Strings portierbar: Ein Verbraucher benötigt kein JavaScript, Python oder Shell-spezifische Escape-Regeln, um die durch gültigen Text dargestellten Zeichen zu bestimmen.

Warum ein Literal-Tab ungültig ist, ein Literal-é jedoch in Ordnung ist

Warum ein Literal-Tab ungültig ist, ein Literal é jedoch in Ordnung ist – JSON verbietet Codepunkte ohne Escapezeichen von U+0000 bis U+001F innerhalb von Zeichenfolgen. Dieser Bereich enthält Tabulatoren, Zeilenumbrüche und andere Steuerelemente, deren unsichtbare Effekte den Rahmen oder die Anzeige stören können. Der Buchstabe `é` ist U+00E9, deutlich außerhalb des Kontrollbereichs, daher kann UTF-8 JSON ihn direkt in Anführungszeichen einfügen. Das Gleiche gilt für die meisten Skripte, Symbole und Emojis.

Das Escapezeichen für gewöhnlichen Unicode ist daher optional und keine Sauberkeitsanforderung. `"café"` und `"caf\u00e9"` dekodieren in dieselbe Zeichenfolge. Direkter Text ist in der Regel für Menschen einfacher zu lesen, während Escapezeichen einen reinen ASCII-Transport unterstützen oder eine bestimmte Codeeinheit sichtbar machen können. Steuerzeichen sind anders: Ihr Escape ist obligatorisch.

Wie \uXXXX-Escapes funktionieren

Wie `\uXXXX`-Escapes funktionieren – auf `u` müssen genau vier hexadezimale Ziffern folgen, wobei in beiden Fällen 0–9 oder A–F verwendet werden muss. `\u00E9` stellt die UTF-16-Codeeinheit für `é` dar, und `\u000A` stellt einen Zeilenvorschub dar. Weniger Ziffern, geschweifte Klammern wie `\u{1F600}` oder ein nicht hexadezimaler Buchstabe machen JSON ungültig, selbst wenn eine andere Programmiersprache diese Notation akzeptiert.

Zeichen über U+FFFF werden in dieser Escape-Form als Ersatzpaar dargestellt. Das Emoji 😀 kann als `\uD83D\uDE00` geschrieben werden: Das hohe und das niedrige Ersatzzeichen werden nach dem Parsen zu einem Unicode-Skalarwert kombiniert. Die JSON-Grammatik kann ein ungepaartes Ersatz-Escapezeichen enthalten, aber nachgeschaltete Encoder und Anwendungen können es ablehnen oder ersetzen, da es kein vollständiges Unicode-Zeichen identifiziert.

Bearbeitetes Beispiel: Escape eines Windows-Pfads und eines HTML-Snippets

Funktioniertes Beispiel: Escape eines Windows-Pfads und eines HTML-Snippets – für den beabsichtigten Pfad `C:\Temp\report.txt` muss jeder Backslash in JSON verdoppelt werden. Quelle: `"C:\\Temp\\report.txt"`. Ohne Verdoppelung ist `\T` ein ungültiges Escapezeichen und Sequenzen wie `\r` oder `\t` können stillschweigend zu Steuerzeichen anstelle von Pfadtrennzeichen werden. Erstellen Sie JSON aus dem beabsichtigten Wert, nicht durch Erraten, welche angezeigten Schrägstriche bereits zu einer äußeren Sprache gehören.

Ein HTML-Fragment wie `<a title="Report">Open</a>` kann seine spitzen Klammern und Schrägstriche im wörtlichen Sinne beibehalten, aber die Anführungszeichen des Attributs müssen innerhalb der Zeichenfolge JSON zu `\"` werden. Wenn ein Zeilenumbruch zwei Tags trennt, kodieren Sie ihn als `\n`. Das resultierende JSON-Mitglied kann validiert und wieder in den ursprünglichen HTML-Text geparst werden.

Wo Fluchtversuche verdoppelt werden

Wo Escapes verdoppelt werden – jede umschließende Textgrammatik erhält ihre eigene Chance, Backslashes zu interpretieren. Ein JSON-Dokument, das die dekodierte Zeichenfolge `line1\nline2` enthält, muss diesen Backslash maskieren, wodurch `"line1\\nline2"` entsteht. Wenn dieser JSON-Text selbst als JSON-String gespeichert ist, benötigen seine Anführungszeichen und beide Backslashes eine weitere Escape-Ebene. Die scheinbare Unordnung zeichnet mehrere Darstellungen auf, keine spezielle erweiterte Form von JSON.

Shells und Programmiersprachenliterale fügen ihre eigenen Anführungszeichenregeln hinzu, bevor ein JSON-Parser das Argument sieht. Diagnose von innen nach außen: Schreiben Sie zuerst den genauen dekodierten Wert, kodieren Sie ihn einmal als JSON und kodieren Sie dann den vollständigen JSON-Text für die umgebende Shell oder Quellsprache. Überprüfen Sie an jeder Grenze, welche Bytes oder Zeichen der nächste Parser tatsächlich empfängt.

Was dies nicht abdeckt

Was dies nicht abdeckt – HTML-Entitäten wie `"` und URL-Prozentkodierung wie `%20` sind separate Transformationen für separate syntaktische Kontexte. Ein JSON-Parser dekodiert keines der beiden Formulare. Die Zeichenfolge `"""` enthält nach dem Parsen sechs Literalzeichen, kein Anführungszeichen, und `"%20"` enthält ein Prozentzeichen gefolgt von zwei Ziffern, kein Leerzeichen. Wenden Sie diese Codierungen nur an, wenn Daten in HTML oder eine URL-Komponente übertragen werden.

Diese Diskussion ersetzt auch nicht die Ausgabekodierung. Gültiges JSON, das von einer nicht vertrauenswürdigen Quelle empfangen wurde, kann weiterhin HTML, skriptähnlichen Text oder Terminalsteuerungssequenzen als gewöhnliche Zeichenfolgendaten enthalten. Die Anwendung, die später einen Befehl rendert oder ausführt, muss dieses Ziel sicher verarbeiten. JSON-Escape schützt die JSON-Struktur; Es handelt sich nicht um eine universelle Desinfektion.

Fazit: Entfliehen Sie dem, was die Grammatik verbietet, nichts weiter

Takeaway: Entferne, was die Grammatik verbietet, nichts weiter – doppelte Anführungszeichen, Backslashes und Codepunkte unter U+0020 erfordern Aufmerksamkeit innerhalb von JSON-Strings. Gewöhnlicher Unicode kann lesbar bleiben, während `\uXXXX` eine exakte vierstellige Alternative bietet und Ersatzpaare Zeichen über U+FFFF darstellen. Eine Diagnose an einer scheinbar leeren Position identifiziert oft ein buchstäbliches Zeilenumbruch-, Tabulator- oder anderes Steuerzeichen, das durch sein Text-Escapezeichen ersetzt werden muss.

Zählen Sie Codierungsebenen, anstatt Schrägstriche nach Sicht zu zählen. Beginnen Sie mit dem Wert, den die Anwendung erhalten soll, kodieren Sie ihn einmal für JSON und zitieren Sie erst dann das resultierende Dokument für eine beliebige äußere Shell, Quelldatei oder zweite JSON-Zeichenfolge. Validieren Sie den dem JSON-Parser präsentierten Text und überprüfen Sie anschließend die dekodierte Zeichenfolge, wenn es auf die Richtigkeit ankommt.