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