2012-04-28 22 views
76

JSON.parse là hai hàm thực hiện cùng một tác vụ. Nếu thư viện jQuery đã được tải, việc sử dụng jQuery.parseJSON có tốt hơn việc sử dụng JSON.parse, về hiệu suất không?jQuery.parseJSON vs JSON.parse

Nếu có, tại sao? Nếu không, tại sao không?

+1

Tôi nghĩ JSON.parse không khả dụng ở các trình duyệt cũ. Về mặt tốc độ, chúng phải giống hệt nhau, JSON.parse sẽ nhanh hơn một chút (tôi nghĩ jQuery sử dụng JSON.parse trong các trình duyệt mới hơn). –

Trả lời

108

Dưới đây là một trích from jQuery 1.9.1:

parseJSON: function(data) { 
    // Attempt to parse using the native JSON parser first 
    if (window.JSON && window.JSON.parse) { 
     return window.JSON.parse(data); 
    } 

    if (data === null) { 
     return data; 
    } 

    if (typeof data === "string") { 

     // Make sure leading/trailing whitespace is removed (IE can't handle it) 
     data = jQuery.trim(data); 

     if (data) { 
      // Make sure the incoming data is actual JSON 
      // Logic borrowed from http://json.org/json2.js 
      if (rvalidchars.test(data.replace(rvalidescape, "@") 
       .replace(rvalidtokens, "]") 
       .replace(rvalidbraces, ""))) { 

       return (new Function("return " + data))(); 
      } 
     } 
    } 

    jQuery.error("Invalid JSON: " + data); 
}, 

Như bạn thấy, jQuery sẽ sử dụng bản địa JSON.parse phương pháp nếu nó có sẵn, và nếu không nó sẽ cố gắng để đánh giá dữ liệu với new Function, đó là loại như eval.

Vì vậy, có, bạn chắc chắn nên sử dụng jQuery.parseJSON.

+3

Chà, câu trả lời tuyệt vời! Cảm ơn tất cả mọi người, tôi nghĩ rằng bạn là câu trả lời toàn diện nhất. –

+0

Tùy thuộc vào nơi json của bạn đến từ, có thể có vấn đề an ninh với phương pháp dự phòng 'eval'. –

+0

Các công cụ rvalidchars.test nên bắt JSON không hợp lệ; điều này có vẻ khá an toàn. – Daniel

10

According to jQuery

Trong trường hợp trình duyệt cung cấp một thực hiện nguồn gốc của JSON.parse, jQuery sử dụng nó để phân tích chuỗi.

do đó điều đó có nghĩa là jQuery cung cấp trình phân tích cú pháp JSON nếu không có triển khai gốc nào tồn tại trên trình duyệt. here's a comparison chart của các trình duyệt có (và không có) chức năng JSON

+0

Vì vậy, tôi đoán đúng, thậm chí không biết jQuery;). –

+0

Cảm ơn biểu đồ thông tin :) –

3

Tôi không biết về hiệu suất, nhưng chắc chắn là an toàn hơn khi sử dụng phương pháp jQuery.
Đó là tất cả về tính tương thích, giống như bạn sử dụng mỗi phương thức của jQuery thay vì phương thức gốc của phương thức forEach của mảng để lặp lại.

+0

IE8 hỗ trợ JSON. – RiZKiT

+0

bạn nói đúng. Cảm ơn. đã cập nhật câu trả lời –

+0

Tôi luôn sử dụng JSON.parse (ngày) vì tôi không bao giờ hỗ trợ IE8- và ít ký tự hơn $ .parseJSON()^_^ Đối với IE8- hãy sử dụng như thế này xicooc

6

JSON.parse() có sẵn trên một số trình duyệt, không phải trên các trình duyệt khác, do đó, an toàn hơn khi sử dụng thư viện. Việc triển khai JQuery hoạt động tốt, như những người trả lời khác đã lưu ý. Ngoài ra còn có Douglas Crockford's JSON library, sử dụng triển khai gốc nếu có.

Thư viện JSON có ưu điểm là nó có một phương pháp để biến một đối tượng JavaScript vào một chuỗi JSON, mà là mất tích từ jQuery vào lúc này ..

+0

Câu trả lời hay nhất vì nó cho biết tại sao thư viện JSON của Douglas Crockford vẫn cần thiết. –

2

Nói về hiệu suất, các nhất được cập nhật câu trả lời là JSON.parse.

Đối tượng JSON có nguồn gốc là hỗ trợ trong mọi trình duyệt hiện nay, vì vậy lựa chọn JSON.parse. Bạn có thể xem bảng hỗ trợ ở đây: http://caniuse.com/#feat=json

Bạn cũng có thể tìm kiếm bí danh này xuất hiện tại kho của JQuery trên GitHub: https://github.com/jquery/jquery/search?utf8=%E2%9C%93&q=parseJSON

Ngoài ra, jQuery.parseJson được phản trên phiên bản 3.0+ như đã đề cập bởi câu trả lời khác ở đây.

Bạn chỉ nên sử dụng phiên bản jQuery nếu bạn là phiên bản JQuery cũ + nếu bạn muốn cung cấp hỗ trợ cho các trình duyệt rất cũ (thông thường, không được đề xuất).

4

Nếu bạn đang sử dụng jQuery 3.0+ thì bạn nên sử dụng JSON.parsejQuery.parseJSON không được dùng nữa.

Kể từ jQuery 3.0, $ .parseJSON không còn được dùng nữa. Để phân tích cú pháp đối tượng JSON, hãy sử dụng phương thức JSON.parse gốc để thay thế.

1

jQuery sử dụng nội bộ JSON.parse để phân tích cú pháp tệp JSON. Do đó, nó không tạo ra bất kỳ sự khác biệt nào trong hầu hết các trường hợp.

Nhưng một số trình duyệt cũ không hỗ trợ chức năng JSON.parse. Trong trường hợp đó, sử dụng jQuery.parseJSON có lợi khi jQuery có thể xử lý JSON bằng chức năng riêng của nó.

LƯU Ý:

jQuery.parseJSON bị phản đối từ jQuery 3.0.So xin vui lòng sử dụng có nguồn gốc JSON.parse phương pháp.

Các vấn đề liên quan