Поддержка JSON на основе браузера (window.JSON)
Я видел ссылки на некоторые браузеры, изначально поддерживающие JSON синтаксический анализ/сериализацию объектов безопасно и эффективно с помощью объекта window.JSON
, но детали трудно найти. Может ли кто-нибудь указать в правильном направлении? Какие методы предоставляет этот объект? В каких браузерах он поддерживается?
Ответы
Ответ 1
Все современные браузеры поддерживают встроенную кодировку/декодирование JSON (Internet Explorer 8+, Firefox 3.1+, Safari 4+ и Chrome 3+). В принципе, JSON.parse(str)
будет анализировать строку JSON в str
и возвращать объект, а JSON.stringify(obj)
будет возвращать JSON-представление объекта obj
.
Подробнее о статье MDN.
Ответ 2
jQuery-1.7.1.js - строка 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,
Ответ 3
Преимущество использования json2.js в том, что он будет устанавливать только синтаксический анализатор, если браузер его еще не имеет. Вы можете поддерживать совместимость со старыми браузерами, но использовать его собственный парсер JSON (который более безопасен и быстрее), если он доступен.
Браузеры с Native JSON:
- IE8 +
- Firefox 3.1 +
- Safari 4.0.3 +
- Opera 10.5 +
G.
Ответ 4
[продление musicfreak комментарий]
Если вы используете jQuery, используйте parseJSON
var obj = jQuery.parseJSON(data)
Внутри он проверяет, поддерживает ли браузер .JSON.parse и (если доступно) вызывает собственное окно. JSON.parse.
Если нет, сам анализирует.
Ответ 5
В интересах любого, кто сталкивается с этим потоком - для обновления, окончательного списка браузеров, поддерживающих объект JSON смотрите здесь.. Краткий общий ответ - почти все браузеры, которые действительно имеют значение в 2013 году +.