JavaScriptで“SyntaxError: Unexpected end of JSON input”のエラーが発生した時の対応方法

created
updated

JSON.parseのSyntaxErrorの原因は文字列になっていない

JSON.parse() - JavaScript | MDN

JSON.parse()は、文字列をJSONオブジェクトに変換する関数です。

エラーパターン:JSONオブジェクトで指定する

JSON.parse({})
> SyntaxError: Unexpected token o in JSON at position 1
>     at JSON.parse (<anonymous>)
>     at Object.<anonymous> (/workspace/Main.js:5:18)
>     at Module._compile (internal/modules/cjs/loader.js:1085:14)
>     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
>     at Module.load (internal/modules/cjs/loader.js:950:32)
>     at Function.Module._load (internal/modules/cjs/loader.js:790:12)
>     at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
>     at internal/main/run_main_module.js:17:47

JSONオブジェクトで指定する場合、エラーとなります。

正しいパターン:文字列でJSON指定する

JSON.parse("{}")
> {}

初期化でバグることが多く、テスト漏れが発生する

文字列で指定するとエラーとなりません。初期化でバグってしまい気付きにくいことがあるので要注意です。

const str = null;
const json = str || {}; // 正しくは文字列の "{}" で指定すること
JSON.parse(json);
> SyntaxError: Unexpected token o in JSON at position 1
>     at JSON.parse (<anonymous>)
>     at Object.<anonymous> (/workspace/Main.js:7:18)
>     at Module._compile (internal/modules/cjs/loader.js:1085:14)
>     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
>     at Module.load (internal/modules/cjs/loader.js:950:32)
>     at Function.Module._load (internal/modules/cjs/loader.js:790:12)
>     at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
>     at internal/main/run_main_module.js:17:47
TOP