Тепер , по- видимому \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));кудиx 34, 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;
}
}
}