【JavaScript】JSON.parse()でエラー(リテラルの不正な制御文字)

とあるJSONファイルをJSON.parse()で読み込もうとしたところ、以下のようなエラーが出た。

Uncaught SyntaxError: JSON.parse: bad control character in string literal at line ○ column ○ of the JSON data

原因

JSONファイルに、改行コードなどの特殊文字が混入している。

コンソールやテキストエディタでは表示されないため原因がわかりにくい。

解決方法

JSON.parse()する前に、以下のようにして、改行コードなどの制御文字を取り除く。

let clean_jsonText = jsonText.replace(/[\u0000-\u0019]+/g, "");

以下のコードでもうまくいった。

let clean_jsonText = jsonText.replace(/[\u0000-\u001F]+/g, "");

上記の違いは、「u0000」から「u0019」までの制御文字を取り除くか「u001F」まで取り除くかの違い。

制御文字の一覧(参考)