Bad control character in string literal in JSON at position N (line L column C)
Eine Zeichenkette in Ihrem Dokument enthält ein wörtliches Steuerzeichen: meistens einen echten Zeilenumbruch, manchmal einen Tabulator. JSON-Zeichenketten dürfen Zeichen unter U+0020 nicht unescapt enthalten. Ein Zeilenumbruch muss als \n geschrieben werden, ein Tabulator als \t. Die Position zeigt auf das störende Zeichen.
Fügen Sie Ihr JSON ein und sehen Sie genau, wo es bricht
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
Was es tatsächlich auslöst
Sortiert danach, wie oft sich das jeweilige als die Antwort herausstellt.
-
01 Mehrzeiliger Text direkt in eine Zeichenkette eingefügt
SQL, HTML, ein Logauszug oder eine Fehlermeldung mit echten Zeilenumbrüchen darin. Für den Parser beendet der Zeilenumbruch die Zeichenkette.
Geht kaputt
{ "query": "SELECT * FROM users" }Funktioniert
{ "query": "SELECT *\nFROM users" } -
02 Durch Zeichenkettenverkettung gebautes JSON
Das ist die eigentliche Ursache fast jedes Vorkommens. Von Hand zusammengesetztes JSON escapt die eingefügten Werte nicht. Serialisieren Sie stattdessen das Objekt, dann kann das Problem gar nicht erst auftreten.
Geht kaputt
const body = '{"note": "' + note + '"}';Funktioniert
const body = JSON.stringify({ note }); -
03 Ein Tabulator aus einem Copy-and-paste
Tabulatoren sind unsichtbar und landen leicht in Zeichenketten, wenn man aus einer Tabellenkalkulation oder einem Terminal kopiert. Escapen Sie sie als \t oder entfernen Sie sie, bevor Sie das Dokument bauen.
-
04 Windows-Zeilenenden innerhalb eines Werts
Ein Wagenrücklauf, U+000D, ist ebenfalls ein Steuerzeichen. Text, der aus einer Windows-Datei gelesen und in eine Zeichenkette eingebettet wird, trägt neben \n auch \r mit sich.
Derselbe Fehler in anderen Laufzeitumgebungen
Das zugrunde liegende Problem ist identisch; nur der Wortlaut unterscheidet sich. Meldet eine Kollegin eine dieser Zeilen, sieht sie genau dasselbe wie Sie.
| Python | Invalid control character at: line 1 column 8 (char 7) |
|---|---|
| Java (Jackson) | Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value |
Häufige Fragen
- Welche Zeichen müssen escapt werden?
- Alles von U+0000 bis U+001F, dazu das doppelte Anführungszeichen und der Backslash. JSON definiert Kurz-Escapes für Backspace, Seitenvorschub, Zeilenumbruch, Wagenrücklauf und Tabulator; alles andere in diesem Bereich braucht die \u-Form, etwa \u0000.
- Kann ich den Parser dazu bringen, sie zu akzeptieren?
- Jackson hat ALLOW_UNESCAPED_CONTROL_CHARS, und manche Parser haben ähnliche Schalter, aber das versteckt das Problem, statt es zu lösen, und das Dokument bleibt für jeden anderen Konsumenten ungültig. Escapen Sie dort, wo das JSON erzeugt wird.
Jetzt beheben
Fügen Sie das Payload in das Werkzeug oben ein, oder gehen Sie direkt zu dem, das für diesen Zweck gebaut wurde.
Automatisch reparieren