Теперь , по- видимому \r, \b, \t, \fи т.д. , не являются единственными проблемными символы , которые могут дать вам эту ошибку.
Обратите внимание, что некоторые браузеры могут иметь дополнительные требования для ввода JSON.parse.
Запустите этот тестовый код в вашем браузере:
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);
Тестируя Chrome, я вижу, что он не разрешает JSON.parse(String.fromCharCode(0x22, x, 0x22));где x34, 92 или от 0 до 31.
Символы 34 и 92 являются "и \символами , соответственно, и они, как правило , ожидаются , и должным образом спаслись. Это символы от 0 до 31, которые доставят вам проблемы.
Чтобы помочь с отладкой, прежде чем сделать это JSON.parse(input), сначала убедитесь, что ввод не содержит проблемных символов:
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;
}
}
}