Agora, aparentemente \r, \b, \t, \f, etc não são os caracteres única problemáticas que podem lhe dar esse erro.
Observe que alguns navegadores podem ter requisitos adicionais para a entrada de JSON.parse.
Execute este código de teste no seu navegador:
var arr = [];
for(var x=0; x < 0xffff; ++x){
try{
JSON.parse(String.fromCharCode(0x22, x, 0x22));
}catch(e){
arr.push(x);
}
}
console.log(arr);
Testando no Chrome, vejo que ele não permite JSON.parse(String.fromCharCode(0x22, x, 0x22));onde xestão 34, 92 ou de 0 a 31.
Os caracteres 34 e 92 são "e\ caracteres respectivamente, e geralmente são esperados e escapam adequadamente. Os caracteres de 0 a 31 dão a você problemas.
Para ajudar na depuração, antes de fazer JSON.parse(input) verificar, verifique primeiro se a entrada não contém caracteres problemáticos:
function VerifyInput(input){
for(var x=0; x<input.length; ++x){
let c = input.charCodeAt(x);
if(c >= 0 && c <= 31){
throw 'problematic character found at position ' + x;
}
}
}