Библиотека Json2/Json3 нужна еще?
Быстрый вопрос. Нужно ли больше включать библиотеку Json2? Я где-то читал, что JavaScript поддерживает JSON в качестве стандартного в эти дни, поэтому нет необходимости его разбирать?
Любые преимущества или недостатки Json2 против стандартной поддержки JavaScript?
Ответы
Ответ 1
JSON
был стандартизован в ECMAScript 5, поэтому браузеры, соответствующие этой спецификации, включают JSON
, но в других браузерах нет ( такие как те, которые были выпущены до ECMAScript 5/IE). Если вам необходимо поддерживать эти браузеры, вам все равно нужно включить его.
В частности, JSON
был введен в:
- IE8,
- FireFox 3.5 -
- Opera 10.5.
- Chrome (1) (AFAIK)
json2.js
проверяет, что JSON.parse
уже реализовано и только обеспечивает его реализацию, если это не так; поэтому подумайте об этом как о разновидности полифиллера для старых браузеров.
Источники: http://kangax.github.com/es5-compat-table/, http://caniuse.com/#feat=json
Ответ 2
Обновление: теперь все пользователи IE8 должны иметь патч (или, альтернативно, вирус!), поэтому, если вы поддерживаете IE8 + в режиме документа 8 или выше, я предлагаю удалить библиотеку Json2 и использовать собственный JSON.stringify() вместо этого.
Существует множество ситуаций, когда вам нужно использовать библиотеку json2:
-
IE10, IE9, IE8: если в документе используется режим IE7 или режим совместимости, вы должны использовать json2. Если ваш документ может быть iframe 'd или в рамке, вам может потребоваться проверить, что произойдет, если хост-фрейм находится в режиме IE7 (странное дерьмо происходит с режимами и рамками документа!).
-
IE8 - Использование json2 - самый надежный способ избежать ошибок в не прошедшем IE8. Ошибки в JSON.stringify() и JSON.parse() были исправлены в течение нескольких лет, но некоторым потребителям не хватает патчей, и ваши клиенты получат неуязвимые ошибки, которые очень нежелательны (см. Ниже возможные способы обхода).
-
IE7 - вам нужно использовать json2.
-
Другим старым браузерам нужен json2, например. iPhone 1. Для детальной разбивки встроенной поддержки отметьте опцию "Показать все браузеры" здесь: http://caniuse.com/#search=JSON
WORKAROUND для незагруженного IE8
Фон: более старые версии IE8 с использованием jscript.dll(например, 5.8.6001.18702) имеют множество ошибок и нестандартное поведение в реализации JSON. http://support.microsoft.com/kb/976662 (jscript.dll 5.8.6001.22960) исправляет эти ошибки. Ошибки также исправлены в более поздней версии jscript.dll 5.8.6001.23141 (я не знаю, к какому КБ относится к этому). Некоторые из вопросов обсуждаются здесь: http://blogs.msdn.com/b/jscript/archive/2009/06/23/serializing-the-value-of-empty-dom-elements-using-native-json-in-ie8.aspx и здесь: http://blogs.msdn.com/b/jscript/archive/2009/06/23/native-json-support-in-ie8-and-tracking-the-ecmascript-fifth-edition-draft-specification.aspx
Багги-версии могут быть обнаружены с помощью:
var kb976662bug = (document.documentMode === 8) && (JSON.stringify(document.createElement('input').value) === '"null"';
Единственный угловой случай, который повлиял на нас, был вызван пустой строкой, генерирующей "null"
вместо ""
. Таким образом, мы удалили библиотеку JSON2, и вместо этого мы используем обходное решение с кодом типа:
if (kb976662bug) {
return JSON.stringify(o, function(k, v) {
return (v === '') ? '' : v;
});
} else {
return JSON.stringify(o);
}
который долгое время работал в нашем производственном коде.