本文へスキップ
jsonbeautifiers
日本語
V8 Node v24.15.0, V8 13.6.233.17 上でパーサーを実行して確認しました。

Bad escaped character in JSON at position N (line L column C)

JSONが認めるエスケープシーケンスはちょうど9種類です。\" \\ \/ \b \f \n \r \t と \uXXXX。バックスラッシュのあとにそれ以外が続けばエラーです。原因はほぼ必ず、Windowsのパスに含まれる単独のバックスラッシュです。\U、\P、\D はエスケープではないからです。

JSONを貼り付けて、壊れている箇所を正確に確認する

入力

貼り付けたものがブラウザの外に出ることはありません。 connect-src の許可リストにより、これは約束ではなくブラウザによる保証になっています。 自分で確かめる

実際の原因

どれが答えになることが多いか、その順に並べています。

  1. 01 バックスラッシュが1つだけのWindowsのファイルパス

    圧倒的に多い原因です。JSON文字列の中のバックスラッシュは、すべて2つ重ねる必要があります。Windowsでもたいていの場面ではスラッシュが使えるので、そちらにすれば問題自体が起きません。

    壊れる例

    { "path": "C:\Users\priya\config.json" }

    動く例

    { "path": "C:\\Users\\priya\\config.json" }
  2. 02 ほかの言語から持ち込んだ16進エスケープ

    JSONに\xエスケープはありません。C、Python、JavaScriptはいずれも文字Aを\x41と書けますが、JSONでは\u0041が必要です。

    壊れる例

    { "c": "\x41" }

    動く例

    { "c": "\u0041" }
  3. 03 文字列に貼り付けた正規表現

    \d、\s、\wといったパターンはJSONのエスケープではありません。JSON文字列に入れる前に、パターン中のバックスラッシュをすべて2つ重ねてください。

    壊れる例

    { "pattern": "^\d{3}-\d{4}$" }

    動く例

    { "pattern": "^\\d{3}-\\d{4}$" }
  4. 04 シングルクォートのエスケープ

    \' はJavaScriptとJSON5では有効ですが、JSONでは無効です。ダブルクォートで囲まれた文字列の中では、アポストロフィにエスケープは一切不要です。

ほかのランタイムでの同じ間違い

根本にある問題は同一で、違うのは文言だけです。同僚がこれらのどれかを報告してきたなら、見ているものはあなたと同じです。

Python Invalid \escape: line 1 column 9 (char 8)

よくある質問

Pythonの文字列は正しく見えるのに、なぜ失敗するのですか?
バックスラッシュが二重に消費されるからです。まずPythonの文字列リテラルが1つ消費し、次にJSONがもう1つ消費します。リテラルにはraw文字列を使うか、JSONを手書きせずオブジェクトを組み立ててjson.dumpsを呼んでください。
\/ は本当に許されているのですか?
許されています。JSONではスラッシュのエスケープは任意で、どちらの書き方も同じ文字を意味します。これがあるのは、HTMLのscriptタグの中にJSONを安全に埋め込めるようにするためです。そこでは</という並びが要素を終わらせてしまいます。

今すぐ直す

上のツールにペイロードを貼り付けるか、この用途のために作られたツールに直接進んでください。

文字列を正しくエスケープする