Sekarang tampaknya \r
, \b
, \t
,\f
, dll tidak chars hanya bermasalah yang dapat memberikan kesalahan ini.
Perhatikan bahwa beberapa browser mungkin memiliki persyaratan tambahan untuk inputJSON.parse
.
Jalankan kode tes ini di browser Anda:
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);
Menguji di Chrome, saya melihat bahwa itu tidak memungkinkan di JSON.parse(String.fromCharCode(0x22, x, 0x22));
mana x
34, 92, atau dari 0 hingga 31.
Karakter 34 dan 92 adalah karakter "
dan \
masing-masing, dan mereka biasanya diharapkan dan lolos dengan benar. Karakter 0 hingga 31 yang akan memberi Anda masalah.
Untuk membantu debug, sebelum Anda melakukannya JSON.parse(input)
, pertama-tama verifikasi bahwa input tidak mengandung karakter yang bermasalah:
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;
}
}
}