jQuery.parseJSON so với JSON.parse


79

jQuery.parseJSONJSON.parselà hai chức năng thực hiện cùng một nhiệm vụ. Nếu thư viện jQuery đã được tải, về mặt hiệu suất thì việc sử dụng jQuery.parseJSONcó tốt hơn so với sử dụng JSON.parsekhông?

Nếu đúng thì tại sao? Nếu không, tại sao không?


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

Câu trả lời:


112

Đây là một trích xuất từ 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 có thể thấy, jQuery sẽ sử dụng JSON.parsephương thức gốc nếu nó có sẵn, và nếu không, nó sẽ cố gắng đánh giá dữ liệu new Function, tương tự như vậy eval.

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


3
Wow, câu trả lời tuyệt vời! Cảm ơn tất cả mọi người, tôi nghĩ của bạn là câu trả lời toàn diện nhất.
Câu hỏi Overflow

Tùy thuộc vào nơi json của bạn đến, có thể có vấn đề bảo mật với phương thức 'eval' dự phòng.
Steve Mayne

Công cụ rvalidchars.test phải bắt JSON không hợp lệ; vì vậy điều này trông khá an toàn.
Daniel

6
Lưu ý rằng điều này đã cũ và một chuỗi rỗng sẽ không còn trả về null nữa. Thay vào đó, nó sẽ tạo ra một lỗi.
mlissner

3
Có, tôi nghĩ câu trả lời này nên được cập nhật để nói rằng hầu như không cần sử dụng một thư viện lớn như jQuery cho việc này. Sẽ báo cáo liên kết của Joseph the Dreamer để hiển thị việc chấp nhận trình duyệt của JSON.parse: caniuse.com/#search=json
Hulvej

10

Theo jQuery

Trong trường hợp trình duyệt cung cấp triển khai gốc của JSON.parse, jQuery sử dụng nó để phân tích cú pháp 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. đây là biểu đồ so sánh của các trình duyệt có (và không có) chức năng JSON


6

JSON.parse () nguyên bản có sẵn trên một số trình duyệt chứ không phải trên các trình duyệt khác, vì vậy sẽ 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ó thư viện JSON của Douglas Crockford , sử dụng triển khai gốc nếu có.

Thư viện JSON có lợi thế là nó có một phương thức để biến một đối tượng JavaScript thành một chuỗi JSON, điều này còn thiếu trong jQuery vào lúc này ..


Câu trả lời hay nhất vì nó chỉ ra lý do tại sao thư viện JSON của Douglas Crockford vẫn cần thiết.
Nathan Moinvaziri

6

Nếu bạn đang sử dụng jQuery phiên bản 3 (phát hành năm 2016) thì bạn nên sử dụng JSON.parse()jQuery.parseJSON() đã không được dùng nữa .

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


3

Tôi không biết về hiệu suất, nhưng chắc chắn sẽ an toàn hơn khi sử dụng phương thức jQuery vì một số trình duyệt như ie7 trở xuống có thể không có bất kỳ chức năng JSON nào.
Tất cả là về tính tương thích, giống như bạn sử dụng từng phương thức của jQuery thay vì forEachphương thức gốc của mảng để lặp lại.


Tôi luôn sử dụng JSON.parse (ngày tháng) vì tôi không bao giờ hỗ trợ IE8- và các ký tự nhỏ hơn $ .parseJSON () ^ _ ^ Đối với IE8- hãy sử dụng như thế này <! - [if lt IE 8]> <meta http- Equiv = "Làm mới" content = "0; url = / error-browser.html"> <! [endif] ->
xicooc

2

Nói về hiệu suất , câu trả lời cập nhật nhấtJSON.parse.

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

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

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

Bạn chỉ nên sử dụng phiên bản của 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 khuyến nghị ).


1

jQuery sử dụng nội bộ JSON.parseđể phân tích cú pháp tệp JSON, vì vậy 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ũ hơn không hỗ trợ JSON.parsechức năng, trong trường hợp đó, việc sử dụng jQuery.parseJSONsẽ có lợi vì jQuery có thể xử lý JSON bằng chức năng riêng của nó.

GHI CHÚ:

jQuery.parseJSONkhông được chấp nhận từ jQuery 3.0. Vì vậy, hãy sử dụng JSON.parsephương pháp gốc .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.