Invalid \escape: line L column C (char N)
Auf einen Backslash in einer JSON-Zeichenkette folgt ein Zeichen, das keines der neun JSON-Escapes ist. In Python-Code verdoppelt sich die Verwirrung, weil auch das Python-String-Literal Backslashes verbraucht - der Text, der beim Parser ankommt, ist also nicht der, den Sie getippt haben.
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 Ein Windows-Pfad
Jeder Backslash muss für JSON verdoppelt werden, und in einem nicht-rohen Python-Literal noch einmal für Python. Ein Raw-String nimmt eine dieser Schichten weg.
Geht kaputt
json.loads('{"p": "C:\Users"}')Funktioniert
json.loads(r'{"p": "C:\\Users"}') -
02 Ein regulärer Ausdruck
\d, \s und \w sind keine JSON-Escapes. Verdoppeln Sie jeden Backslash.
-
03 Ein \x-Hex-Escape
JSON hat nur \uXXXX. Aus \x41 muss \u0041 werden.
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 escaped character in JSON at position 9 (line 1 column 10) |
|---|
Häufige Fragen
- Warum funktioniert dieselbe Zeichenkette an einer Stelle und an einer anderen nicht?
- Weil es darauf ankommt, durch wie viele String-Literale sie geht. Ein Pfad, der direkt in einer .json-Datei steht, braucht eine Verdopplungsebene. Derselbe Pfad in einem Python-Literal in einem Shell-Argument kann drei brauchen.
- Ist das dasselbe wie die SyntaxWarning zu ungültigen Escape-Sequenzen?
- Nein, und man verwechselt beides leicht. Jene Warnung ist Python, das sich über Ihren Quelltext beschwert, bevor überhaupt JSON im Spiel ist. Dieser Fehler kommt vom JSON-Parser und betrifft den Inhalt der Zeichenkette.
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.
Korrekt escapen