Invalid control character at: line L column C (char N)
Eine Zeichenkette enthält ein wörtliches Zeichen unterhalb von U+0020, meist einen echten Zeilenumbruch oder Tabulator. JSON verlangt, dass diese escapt werden. Python hat eine Option strict=False, die sie akzeptiert, aber das entstehende Dokument bleibt für jeden anderen Konsumenten ungültig.
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 in einer Zeichenkette
Logauszüge, SQL, Stacktraces und Template-HTML tragen alle echte Zeilenumbrüche.
Geht kaputt
json.loads('{"sql": "SELECT * FROM t"}')Funktioniert
json.loads('{"sql": "SELECT *\\nFROM t"}') -
02 Mit f-Strings oder Verkettung zusammengebautes JSON
Interpolierte Werte werden nicht escapt. Bauen Sie ein dict und verwenden Sie json.dumps, das alles korrekt escapt.
Geht kaputt
body = f'{{"note": "{note}"}}'Funktioniert
body = json.dumps({"note": note}) -
03 Ein aus einer Tabellenkalkulation kopierter Tabulator
Unsichtbar, und er übersteht Copy-and-paste unversehrt.
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.
| JavaScript (V8) | Bad control character in string literal in JSON at position 11 (line 1 column 12) |
|---|
Häufige Fragen
- Was macht strict=False?
- json.loads(s, strict=False) erlaubt Steuerzeichen in Zeichenketten. Das bringt Sie weiter, aber das Dokument bleibt ungültiges JSON, sodass alles weiter unten in der Kette, was nicht Python ist, es weiterhin ablehnt. Reparieren Sie stattdessen den Erzeuger.
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.
Die Zeichenkette korrekt escapen