2009-05-21 9 views
87

Widziałem odniesienia do niektórych przeglądarek natywnie obsługujących parsowanie/serializację obiektów JSON bezpiecznie i efektywnie za pomocą obiektu window.JSON, ale szczegóły są trudne do zdobycia. Czy ktoś może wskazać właściwy kierunek? Jakie metody ujawnia ten obiekt? W jakich przeglądarkach jest obsługiwana?Obsługa JSON-a w przeglądarkach (window.JSON)

+8

Zobacz [Kiedy mogę korzystać z parsowania JSON?] (Http://caniuse.com/json), aby uzyskać informacje na temat przeglądarek z natywną obsługą obiektu [JSON] (http://ecma262-5.com/ELS5_Section_15. htm # Section_15.12). – outis

Odpowiedz

104

Wszystkie nowoczesne przeglądarki obsługują kodowanie/dekodowanie JSON (Internet Explorer 8+, Firefox 3.1+, Safari 4+ i Chrome 3+). Zasadniczo, JSON.parse(str) przeanalizuje ciąg JSON w str i zwróci obiekt, a JSON.stringify(obj) zwróci reprezentację JSON obiektu obj.

Więcej informacji na temat MDN article.

+0

Wiem, że wsparcie nie jest powszechne, ale użycie tej metody powinno być dużo szybsze i bezpieczniejsze niż eval() w łańcuchu, więc chcę go użyć tam, gdzie jest dostępny. Masz pomysł na wsparcie innych przeglądarek? – levik

+0

Nie powiedziałem, nie używaj tego, powiedziałem, nie licz na to. Zdecydowanie sprawdź, czy jest dostępny (w tym momencie tylko IE8 i kilku użytkowników Fx Beta) i użyj go, jeśli tak, ale mówię tylko, że nie powinieneś zakładać, że przeglądarka go obsługuje. Obecnie są to jedyne przeglądarki, które ją obsługują, a WebKit pracuje nad tym teraz, więc prawdopodobnie niedługo pojawi się w Google Chrome i Safari. –

+14

Aha, i na marginesie, NIGDY ciągi JSON eval(). Zamiast tego użyj jednej z wielu dostępnych bibliotek parsowania JSON. –

12

Zaletą używania json2.js jest to, że instaluje on parser tylko wtedy, gdy przeglądarka go jeszcze nie ma. Możesz zachować zgodność ze starszymi przeglądarkami, ale użyj natywnego analizatora składni JSON (który jest bezpieczniejszy i szybszy), jeśli jest dostępny.

przeglądarkom macierzystego JSON:

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

G.

10

[rozszerzenie musicfreak komentarz]

Jeśli używasz jQuery, użyj parseJSON

var obj = jQuery.parseJSON(data) 

Wewnętrznie sprawdza, czy przeglądarka obsługuje .JSON.parse oraz (jeśli są dostępne) wywołuje rodzimy window.JSON.parse.

Jeśli nie, analizuje się.

29

jQuery 1.7.1.js - 555 linii ...

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

Nice. Dobry argument do używania jQuery. – OneWorld

+9

Więcej jak argument, aby zajrzeć do wnętrza jQuery =) – Olga

8

Z korzyścią dla każdego, kto prowadzi do tego wątku - dla up-to-date, ostateczną listę przeglądarek, które wspierają Obiekt JSON look here.. Krótka ogólna odpowiedź - prawie wszystkie przeglądarki, które mają znaczenie w roku 2013+.