V8 Node v24.15.0, V8 13.6.233.17 上でパーサーを実行して確認しました。
Expected double-quoted property name in JSON at position N (line L column C)
パーサーはオブジェクトの中でカンマを読み、次にもうひとつプロパティ名が来ると期待しましたが、見つけたのは閉じ波括弧でした。つまり、後ろに何もないカンマがあるということです。メッセージは「何を間違えたか」ではなく「パーサーが何を求めていたか」を述べているため、その文面から直し方は読み取れません。
次のような書き方で見かけることもあります
- trailing comma json error
- trailing comma not allowed in json
V8は2022年に、JSONのエラーメッセージのほとんどを書き換えました。検索結果に出てくるのはいまだに古い文言がほとんどですが、現行のランタイムはどれもそれを出力しません。
JSONを貼り付けて、壊れている箇所を正確に確認する
入力
貼り付けたものがブラウザの外に出ることはありません。 connect-src の許可リストにより、これは約束ではなくブラウザによる保証になっています。 自分で確かめる
実際の原因
どれが答えになることが多いか、その順に並べています。
-
01 閉じ波括弧の前の末尾カンマ
JavaScript、JSON5、JSONCでは合法です。JSONでは違法です。JavaScriptのオブジェクトを自動整形するエディタは、これを警告なしに付け加えます。
壊れる例
{ "name": "Priya", "role": "admin", }動く例
{ "name": "Priya", "role": "admin" } -
02 カンマが2つ続いている
プロパティを削除したあとに取り残されていることが多いパターンです。
壊れる例
{ "a": 1,, "b": 2 }動く例
{ "a": 1, "b": 2 } -
03 プロパティ名が来るべき位置にコメント
JSONにコメントはありません。オブジェクトの中の//行や/* */ブロックは、まったく同じメッセージを出します。パーサーはクォートされたキーを期待していて、スラッシュを見つけたからです。
ほかのランタイムでの同じ間違い
根本にある問題は同一で、違うのは文言だけです。同僚がこれらのどれかを報告してきたなら、見ているものはあなたと同じです。
| V8, trailing comma in an ARRAY | Unexpected token ']', "[1,2,]" is not valid JSON |
|---|---|
| Python 3.13 and later | Illegal trailing comma before end of object: line 1 column 7 (char 6) |
| Python 3.12 and earlier | Expecting property name enclosed in double quotes: line 1 column 7 (char 6) |
よくある質問
- 配列だとメッセージが違うのはなぜですか?
- パーサーの状態が違うからです。オブジェクトの中ではクォートされたキーを待っているので、そう言います。配列の中では値を待っていて閉じ角括弧を見つけるため、Unexpected token ']', "[1,2,]" is not valid JSON になります。同じ間違いなのに、まったく別のメッセージです。
- Pythonは以前これに別のエラーを出していました。変わったのですか?
- 変わりました。Python 3.13で専用のメッセージが追加されました。「Illegal trailing comma before end of object」と、配列向けの対応するメッセージです。3.12以前では、同じ入力が「Expecting property name enclosed in double quotes」になります。バージョンで分けていない解説は、読者の半分に対して間違っています。
- 設定ファイルにコメントと末尾カンマが必要です。選択肢はありますか?
- VS Codeが自身の設定に使っているJSONCなら、コメントと末尾カンマが使えます。JSON5ならさらに多くを許します。いずれも、それに対応したパーサーが必要です。当サイトの修復ツールは、どちらからでも厳密なJSONへ戻せます。