Bây giờ rõ ràng \r, \b, \t,\f , vv không phải là ký tự chỉ có vấn đề mà có thể cung cấp cho bạn lỗi này.
Lưu ý rằng một số trình duyệt có thể có các yêu cầu bổ sung cho đầu vào củaJSON.parse .
Chạy mã kiểm tra này trên trình duyệt của bạn:
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);
Thử nghiệm trên Chrome, tôi thấy rằng nó không cho phép JSON.parse(String.fromCharCode(0x22, x, 0x22));ở đâux 34, 92 hoặc từ 0 đến 31.
Chars 34 và 92 là "và\ tương ứng là các ký tự ký tự, và chúng thường được mong đợi và thoát đúng. Đó là ký tự 0 đến 31 sẽ cung cấp cho bạn các vấn đề.
Để giúp gỡ lỗi, trước khi bạn thực hiện JSON.parse(input), trước tiên hãy xác minh rằng đầu vào không chứa các ký tự có vấn đề:
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;
}
}
}