Widziałem odniesienia do niektórych przeglądarek natywnie obsługujących analizowanie / serializację obiektów JSON bezpiecznie i wydajnie za pośrednictwem window.JSON
Object, ale trudno jest uzyskać szczegóły. Czy ktoś może wskazać właściwy kierunek? Jakie metody ujawnia ten obiekt? W jakich przeglądarkach jest obsługiwany?
javascript
json
browser
levik
źródło
źródło
Odpowiedzi:
Wszystkie nowoczesne przeglądarki obsługują natywne kodowanie / dekodowanie JSON (Internet Explorer 8+, Firefox 3.1+, Safari 4+ i Chrome 3+). Zasadniczo
JSON.parse(str)
przeanalizuje ciąg JSONstr
i zwróci obiekt orazJSON.stringify(obj)
zwróci reprezentację obiektu w formacie JSONobj
.Więcej szczegółów w artykule MDN .
źródło
eval()
używaj ciągów JSON, ponieważ odkryjesz koło na nowo i prawdopodobnie źle to zrobisz.jQuery-1.7.1.js - linia 555 ...
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,
źródło
Zaletą korzystania z json2.js jest to, że zainstaluje parser tylko wtedy, gdy przeglądarka jeszcze go nie ma. Możesz zachować zgodność ze starszymi przeglądarkami, ale użyj natywnego parsera JSON (który jest bezpieczniejszy i szybszy), jeśli jest dostępny.
Przeglądarki z natywnym JSON:
SOL.
źródło
[rozszerzenie komentarza musicfreak ]
Jeśli używasz jQuery, użyj parseJSON
var obj = jQuery.parseJSON(data)
Wewnętrznie sprawdza, czy przeglądarka obsługuje .JSON.parse i (jeśli jest dostępne) wywołuje natywne okno.JSON.parse.
Jeśli nie, sam analizuje.
źródło
Z korzyścią dla każdego, kto wejdzie do tego wątku - aktualną, ostateczną listę przeglądarek obsługujących obiekt JSON znajdziesz tutaj. . Krótka ogólna odpowiedź - prawie wszystkie przeglądarki, które naprawdę mają znaczenie w roku 2013+.
źródło