本文へスキップ
jsonbeautifiers
日本語
Python CPython 3.14.3 上でパーサーを実行して確認しました。

Expecting property name enclosed in double quotes: line L column C (char N)

パーサーはオブジェクトの中にいて、ダブルクォートで囲まれたキーを期待していました。しかし別のものが来ました。シングルクォート、裸の単語、あるいは古いPythonでは末尾カンマです。JSONはキーをダブルクォートの文字列であることと定めており、識別子に見えるキーであっても例外はありません。

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

入力

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

実際の原因

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

  1. 01 シリアライズではなく出力されたPythonのdict

    str(d)やprint(d)はシングルクォートを生みます。このエラーの発生源として群を抜いて多いパターンです。

    壊れる例

    data = str({'a': 1})
    json.loads(data)

    動く例

    data = json.dumps({'a': 1})
    json.loads(data)
  2. 02 WindowsにおけるAWS/Azure CLIのクォート処理

    PowerShellやcmdはPOSIXシェルとは違うやり方で引用符を扱うため、コマンドラインに直接書いたJSON引数は、ダブルクォートが取り除かれた状態でCLIに届きます。確実な対処は、シェルと戦うのをやめてJSONをファイルに置き、file://params.jsonを渡すことです。

    壊れる例

    aws dynamodb query --key-condition-expression "{\"id\": ...}"

    動く例

    aws dynamodb query --cli-input-json file://params.json
  3. 03 Python 3.12以前における末尾カンマ

    3.13より前は、末尾カンマがこのメッセージを出していました。3.13以降は専用のメッセージ「Illegal trailing comma before end of object」になります。バージョンに触れていない解説を読んでいる場合、目の前の表示と食い違う理由はこれです。

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

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

JavaScript (V8) Expected property name or '}' in JSON at position 1 (line 1 column 2)

よくある質問

Pythonのdictのreprを書き換えずにパースできますか?
ast.literal_evalが安全に処理します。evalと違い、任意のコードを実行せずにPythonのリテラル構文だけを評価します。本物のJSONが必要なら、その結果をjson.dumpsに通してください。

今すぐ直す

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

シングルクォートをJSONに変換する