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 x
estã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;
}
}
}