Подтвердить что ты не робот

Библиотека Json2/Json3 нужна еще?

Быстрый вопрос. Нужно ли больше включать библиотеку Json2? Я где-то читал, что JavaScript поддерживает JSON в качестве стандартного в эти дни, поэтому нет необходимости его разбирать?

Любые преимущества или недостатки Json2 против стандартной поддержки JavaScript?

4b9b3361

Ответ 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);
}

который долгое время работал в нашем производственном коде.