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

Expected property name or '}' in JSON at position N (line L column C)

パーサーはオブジェクトを開き、ダブルクォートで囲まれたキーか閉じ波括弧のどちらかを期待していました。しかし別のものが来ました。実際のデータでは、その「別のもの」はほぼ必ずシングルクォートか裸の識別子です。つまりそのテキストは、JSONではなくPythonのdictのreprか、JavaScriptのオブジェクトリテラルだということです。

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

入力

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

実際の原因

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

  1. 01 str()で出力したPythonのdictに由来する、シングルクォートのキー

    print(my_dict)やstr(my_dict)が生むのはJSONではなくPythonの構文です。シングルクォートが使われ、true、false、nullの代わりにTrue、False、Noneが現れます。JSONを生成するにはjson.dumpsを使ってください。

    壊れる例

    {'name': 'Priya', 'active': True}

    動く例

    {"name": "Priya", "active": true}
  2. 02 JavaScriptのオブジェクトリテラルに由来する、クォートのないキー

    JavaScriptは裸の識別子をキーにできます。JSONはできません。そのキーが識別子として完全に妥当であっても同じです。

    壊れる例

    { name: "Priya", role: "admin" }

    動く例

    { "name": "Priya", "role": "admin" }
  3. 03 設定ファイル内のコメント

    JSONにコメントの構文はありません。オブジェクトの中の//や/*は、このエラーになります。

  4. 04 ワープロソフト由来の全角・曲線の引用符

    Word、Google ドキュメント、メモ、いくつかのチャットクライアントのオートコレクトは、まっすぐな引用符を曲がった引用符に変えます。JSONのパーサーにとって曲がった引用符は文字列の区切りではなく、ただの文字です。当サイトのバリデーターは、汎用の「予期しないトークン」ではなく、その文字を名指しで報告します。

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

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

Python Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
Java (Jackson) Unexpected character ('s' (code 115)): was expecting double-quote to start field name

よくある質問

PythonのdictからJSONを正しく作るには?
json.dumps(obj)がJSON文字列を返します。str(obj)やprint(obj)が返すのは、見た目が似ているだけのPythonの構文です。これは実際に出回っている不正なJSONの、もっともよくある発生源のひとつです。
PythonのdictのreprをどうやってもいいのでJSONに変換できますか?
できます。ast.literal_evalが安全にPythonのオブジェクトへ解析してくれるので、そのあとjson.dumpsを通してください。当サイトの修復ツールも同じ処理をブラウザ内で行い、シングルクォートとTrue・False・Noneのリテラルを1回のパスで変換します。

今すぐ直す

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

妥当なJSONに変換する