2009-05-21 33 views
87

Tôi đã thấy các tham chiếu đến một số trình duyệt hỗ trợ phân tích cú pháp JSON/tuần tự hóa các đối tượng một cách an toàn và hiệu quả thông qua đối tượng window.JSON. Có ai có thể chỉ đúng hướng không? Các phương pháp mà Object này phơi bày là gì? Những trình duyệt nào được hỗ trợ theo?Hỗ trợ JSON nguyên gốc của trình duyệt (window.JSON)

+8

Xem [Khi nào tôi có thể sử dụng phân tích cú pháp JSON?] (Http://caniuse.com/json) để biết thông tin về các trình duyệt có hỗ trợ gốc cho [đối tượng JSON] (http://ecma262-5.com/ELS5_Section_15. htm # Section_15.12). – outis

Trả lời

104

Tất cả các trình duyệt hiện đại đều hỗ trợ mã hóa/giải mã JSON gốc (Internet Explorer 8+, Firefox 3.1+, Safari 4+ và Chrome 3+). Về cơ bản, JSON.parse(str) sẽ phân tích cú pháp chuỗi JSON trong str và trả về một đối tượng và JSON.stringify(obj) sẽ trả về biểu diễn JSON của đối tượng obj.

Thêm chi tiết về số MDN article.

+0

Tôi biết sự hỗ trợ không phổ biến, nhưng việc sử dụng phương pháp này sẽ nhanh hơn rất nhiều và an toàn hơn eval() trong một chuỗi, vì vậy tôi muốn sử dụng nó ở nơi có sẵn. Bất kỳ ý tưởng nào về hỗ trợ từ các trình duyệt khác? – levik

+0

Tôi đã không nói không sử dụng nó, tôi nói không tin vào nó. Chắc chắn kiểm tra xem nếu nó có sẵn (tại thời điểm này chỉ có IE8 và vài người dùng Fx Beta) và sử dụng nó nếu có, nhưng tôi chỉ nói rằng bạn không nên giả định trình duyệt hỗ trợ nó. Hiện tại, hai trình duyệt này chỉ là trình duyệt hỗ trợ nó và WebKit hiện đang làm việc trên nó, vì vậy nó có thể sẽ sớm có trong Google Chrome và Safari. –

+14

Ồ, và trên một lưu ý phụ, KHÔNG BAO GIỜ eval() chuỗi JSON. Thay vào đó, sử dụng một trong nhiều thư viện phân tích cú pháp JSON có sẵn. –

12

Lợi thế của việc sử dụng json2.js là nó sẽ chỉ cài đặt trình phân tích cú pháp nếu trình duyệt chưa có trình phân tích cú pháp. Bạn có thể duy trì khả năng tương thích với các trình duyệt cũ hơn, nhưng sử dụng trình phân tích cú pháp JSON nguyên gốc (an toàn hơn và nhanh hơn) nếu nó có sẵn.

trình duyệt với JSON Quê quán:

  • IE8 +
  • Firefox 3.1+
  • Safari 4.0.3+
  • Opera 10.5+

G.

10

[mở rộng musicfreak nhận xét]

Nếu bạn đang sử dụng jQuery, sử dụng parseJSON

var obj = jQuery.parseJSON(data) 

Bên trong nó sẽ kiểm tra nếu trình duyệt hỗ trợ .JSON.parse, và (nếu có) gọi window.JSON.parse bản địa.

Nếu không, phân tích cú pháp chính nó.

29

jQuery-1.7.1.js - 555 dò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); 

    // Attempt to parse using the native JSON parser first 
    if (window.JSON && window.JSON.parse) { 
     return window.JSON.parse(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); 
} 





rvalidchars = /^[\],:{}\s]*$/, 

rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, 

rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, 

rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, 
+4

Tốt. Lập luận tốt để sử dụng jQuery. – OneWorld

+9

Giống như một đối số để xem bên trong jQuery =) – Olga

8

Để tiện lợi hơn bất cứ ai chạy vào chủ đề này - cho một, danh sách dứt khoát up-to-date của trình duyệt hỗ trợ Đối tượng JSON look here.. Một câu trả lời chung ngắn gọn - khá nhiều tất cả các trình duyệt thực sự quan trọng trong năm 2013+.

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