JSONの構文エラーの直し方|よくある原因と修正手順

「Unexpected token」「Unexpected end of JSON input」といったエラーは、 JSONを扱っていると一度は目にするメッセージです。多くの場合、原因は ごく小さな書き間違いにあります。本記事では、発生しやすい順に 代表的な原因と直し方をまとめました。

原因1:末尾のカンマ(trailing comma)

配列やオブジェクトの最後の要素のあとに、うっかりカンマを残してしまうケースです。

{ "name": "太郎", "age": 20, }

JavaScriptのオブジェクトでは末尾カンマが許容されることがありますが、 JSONの仕様では認められていません。最後の要素のあとのカンマは削除します。

原因2:シングルクォートを使っている

JSONの文字列やキーは、必ずダブルクォート(")で囲む必要があります。 シングルクォート(')はエラーになります。

{ 'name': '太郎' }  ← エラー
{ "name": "太郎" }  ← 正しい

原因3:キーがクォートで囲まれていない

JavaScriptのオブジェクトリテラルでは、キーをクォートなしで書けますが、 JSONでは必ずダブルクォートが必要です。

{ name: "太郎" }    ← エラー
{ "name": "太郎" }  ← 正しい

原因4:コメントが書かれている

JSONには//や/* */のようなコメント構文がありません。 設定ファイルなどでJSON5やJSONCといった拡張形式を使っている場合、 通常のJSONパーサーでは読み込めず、コメント部分でエラーになります。

原因5:改行やタブなどの制御文字がそのまま入っている

コピー&ペーストした文字列の中に、改行やタブといった制御文字が エスケープされずに混じっていると、構文エラーになります。 文字列として改行を含めたい場合は、\nのようにエスケープします。

原因6:全角文字が紛れ込んでいる

コロン「:」やカンマ「,」、ダブルクォート「”」のような全角記号が、 半角のつもりで紛れ込んでいることがあります。日本語環境の入力補完や 自動変換で起きやすいミスです。見た目では気づきにくいため、 エラー箇所の文字を1つずつ確認すると見つかりやすくなります。

原因7:データが空、または途中で切れている

「Unexpected end of JSON input」は、JSONの途中でデータが切れている ときに出るエラーです。APIのレスポンスをコピーする際に末尾が欠けていないか、 ファイルの保存が途中で止まっていないかを確認します。

エラー箇所をすばやく見つけるには

エラーメッセージに行番号や位置が含まれている場合は、まずそこを確認します。 それでも見つからない場合は、JSONを整形(インデント)し直すと、 かっこの対応が崩れている箇所が視覚的にわかりやすくなります。

なお、JSONの構造そのものが正しいかを確認したい場合は、 JSONスキーマ を使うと、型や必須項目の過不足まで検証できます。

まとめ

JSONの構文エラーは、末尾カンマ・シングルクォート・クォートなしキーの 3つだけで、実務で遭遇するケースの大半を占めます。残りは、コメント、 制御文字、全角記号、データの欠落です。エラー箇所を特定したいときは、 JSON整形ツール に貼り付けると、該当する行と列を確認できます。