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

Unexpected end of JSON input

パーサーは、まだ続きを期待している最中に入力の末尾に達しました。文字列が最初から空だったか、値が開いたままドキュメントが途中で切れたかのどちらかです。このメッセージには位置情報が付いていない点に注目してください。位置が付くエラーとの違いはまさにそこです。

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

入力

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

実際の原因

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

  1. 01 文字列が空

    JSON.parse("")はただちにこのエラーを投げます。空文字列は妥当なJSONではありません。HTTP 204、ボディのないレスポンス、あるいは空文字列として書き込まれたlocalStorageのキーなどが原因です。

    壊れる例

    JSON.parse(localStorage.getItem('draft'))

    動く例

    const raw = localStorage.getItem('draft');
    const draft = raw ? JSON.parse(raw) : null;
  2. 02 レスポンスのボディをすでに読み終えていた

    Responseのボディは一度しか読めません。同じレスポンスに対してres.text()を呼んでからres.json()を呼ぶと、2回目には空文字列が返ります。

    壊れる例

    const text = await res.text();
    const data = await res.json();   // body already used

    動く例

    const text = await res.text();
    const data = text ? JSON.parse(text) : null;
  3. 03 ドキュメントが途中で切れている

    接続の切断、ボディサイズの上限(Expressの既定は100kB)、途中で終わったストリームの読み取り、あるいは読み取り中に書き込まれていたファイルなど。入力がオブジェクトの途中で終わっている場合、当サイトのバリデーターは開いたままの括弧すべてと、それぞれがどこで始まったかを示します。

    壊れる例

    {"users": [{"id": 1}, {"id":

    動く例

    {"users": [{"id": 1}, {"id": 2}]}
  4. 04 npmやyarnのキャッシュが壊れている

    この文字列で検索される件数のかなりの部分は、アプリのコードではなくnpmに関するものです。書き込みが途中で終わったキャッシュファイルは、インストール時に同じエラーを起こします。npm cache clean --force を実行し、node_modulesとpackage-lock.jsonを削除して、もう一度インストールしてください。

  5. 05 何も返さない関数の戻り値をパースした

    JSON.parse(undefined)は別のメッセージ("undefined" is not valid JSON)になりますが、undefinedではなく空文字列を返す関数の場合はこのエラーになります。

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

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

Python Expecting value: line 1 column 1 (char 0)
Python, truncated object Expecting ',' delimiter: line 1 column 28 (char 27)

よくある質問

このメッセージに行や列がないのはなぜですか?
指し示すべき位置が存在しないからです。失敗の内容は「入力が終わってしまった」ことなので、問題の場所はドキュメントの末尾です。当サイトのバリデーターはこれを「入力の終端」として報告し、まだ開いていた括弧を一覧表示します。
JSON.parse(null)はこのエラーを投げますか?
投げません。JSON.parse(null)はnullを文字列"null"に変換したうえでnullを返します。意外に思われる挙動です。投げるのは空文字列のほうです。

今すぐ直す

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

閉じていない括弧を探す