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