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;
}
}
}