tôi nhận thấy rằng jQuery parseJSON cơ bản nào một regex đơn giản "kiểm tra":Có nên sử dụng các phương thức parseJSON/getJSON của jQuery không?
parseJSON: function(data) {
if (typeof data !== "string" || !data) {
return null;
}
// Make sure leading/trailing whitespace is removed (IE can't handle it)
data = jQuery.trim(data);
// Make sure the incoming data is actual JSON
// Logic borrowed from http://json.org/json2.js
if (/^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
.replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) {
// Try to use the native JSON parser first
return window.JSON && window.JSON.parse ?
window.JSON.parse(data) :
(new Function("return " + data))();
} else {
jQuery.error("Invalid JSON: " + data);
}
},
Nếu nó đi mà "kiểm tra" và nếu đó là một trình duyệt hiện đại một phân tích cú pháp JSON có nguồn gốc được sử dụng. Nếu không, tôi giả định cho một trình duyệt như IE6 một chức năng mới được tự động gọi và trả về đối tượng.
Câu hỏi # 1: Vì đây chỉ là một thử nghiệm regex đơn giản, điều này có dễ bị khai thác cạnh tối nghĩa không? Có nên chúng ta thực sự không sử dụng trình phân tích cú pháp đầy đủ, đối với các trình duyệt không hỗ trợ phân tích cú pháp JSON gốc ít nhất?
Câu hỏi # 2: Bao nhiêu "an toàn hơn" là (new Function(" return " + data))()
thay vì eval("(" + text + ")")
?
json2.js sẽ sử dụng cùng một regex, và sau đó là 'eval', nếu không có sẵn JSON gốc. –
Lưu ý. Cảm ơn bạn đã làm rõ. – spoulson