Python CPython 3.14.3 上でパーサーを実行して確認しました。
Invalid \escape: line L column C (char N)
JSON文字列の中のバックスラッシュのあとに、JSONの9種類のエスケープのどれでもない文字が続いています。Pythonのコードでは混乱が二重になります。Pythonの文字列リテラル自体もバックスラッシュを消費するため、パーサーに届くテキストは、あなたが打ったものとは違うからです。
JSONを貼り付けて、壊れている箇所を正確に確認する
入力
貼り付けたものがブラウザの外に出ることはありません。 connect-src の許可リストにより、これは約束ではなくブラウザによる保証になっています。 自分で確かめる
実際の原因
どれが答えになることが多いか、その順に並べています。
-
01 Windowsのパス
バックスラッシュはJSON用に2つ重ねる必要があり、raw文字列でないPythonリテラルの中ではPython用にもう一度重ねる必要があります。raw文字列を使えば、その層のひとつが消えます。
壊れる例
json.loads('{"p": "C:\Users"}')動く例
json.loads(r'{"p": "C:\\Users"}') -
02 正規表現
\d、\s、\wはJSONのエスケープではありません。バックスラッシュをすべて2つ重ねてください。
-
03 \xの16進エスケープ
JSONには\uXXXXしかありません。\x41は\u0041にする必要があります。
ほかのランタイムでの同じ間違い
根本にある問題は同一で、違うのは文言だけです。同僚がこれらのどれかを報告してきたなら、見ているものはあなたと同じです。
| JavaScript (V8) | Bad escaped character in JSON at position 9 (line 1 column 10) |
|---|
よくある質問
- 同じ文字列が、ある場所では動いて別の場所では動かないのはなぜですか?
- 文字列リテラルを何回通過するかによります。.jsonファイルに直接書いたパスなら重ねるのは1段階です。同じパスがPythonのリテラルの中にあり、さらにシェルの引数の中にある場合、3段階必要になることもあります。
- 不正なエスケープシーケンスに関するSyntaxWarningと同じものですか?
- 違います。そして混同しやすい2つです。あの警告は、JSONが関わる前の段階で、Pythonがあなたのソースコードについて文句を言っているものです。こちらのエラーはJSONのパーサーが出しており、文字列の中身についてのものです。