Ahora, aparentemente \r
, \b
, \t
,\f
, etc, no son los caracteres problemáticos única que le puede dar este error.
Tenga en cuenta que algunos navegadores pueden tener requisitos adicionales para la entrada deJSON.parse
.
Ejecute este código de prueba en su 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);
Al probar en Chrome, veo que no permite JSON.parse(String.fromCharCode(0x22, x, 0x22));
dóndex
está 34, 92 o de 0 a 31.
Los caracteres 34 y 92 son los caracteres "
y \
respectivamente, y generalmente se esperan y se escapan correctamente. Son los caracteres 0 a 31 los que te darían problemas.
Para ayudar con la depuración, antes de hacerlo JSON.parse(input)
, primero verifique que la entrada no contenga 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;
}
}
}