Статьи

Государство JSON

Я хотел собрать воедино некоторые недавние события, связанные с собственной поддержкой JSON в веб-браузере, которые должны быть важны для многих веб-разработчиков. Это должно послужить своего рода продолжением моего предыдущего поста: Требуется собственная поддержка JSON .

Ранние попытки стандартизации API — В прошлом году комитет по языкам ECMAScript предпринял ряд попыток стандартизировать API для кодирования и декодирования JSON на этом языке. Было рассмотрено и обсуждено несколько предложений API, большинство из которых основано на предложении Крокфорда , но общего консенсуса достигнуто не было. Были выдвинуты некоторые общие проблемы с предлагаемым API (аналогичные тем, которые упоминались в моем предыдущем посте ).

JSON2.js — в конце прошлого года Крокфорд незаметно выпустил новую версию своего JSON API, которая заменила его существующий API . Важным отличием было то, что он использовал один базовый объект (JSON) вместо расширения всех прототипов нативных объектов (booo!). Его пересмотренный API работал так:

JSON.stringify({name: "John", location: "Boston"});
// => '{"name":"John","location":"Boston"}'

JSON.parse('{"name":"John","location":"Boston"}');
// => {name: "John", location: "Boston"}

Эта версия JSON.js настоятельно рекомендуется . Если вы все еще используете старую версию, пожалуйста, обновите ее (эта, несомненно, вызывает меньше проблем, чем предыдущая).

Дисперсия — даже с недавно предложенным API, критика относительно включения JSON в язык ECMAScript привела к сомнительному заключению. Некоторые разработчики не были заинтересованы в его включении, другие были заинтересованы, а другие не могли определиться с окончательным API или именами методов. Затем было решено, что реализация поддержки JSON в реализации ECMAScript будет оставлена ​​на усмотрение самих разработчиков (если, конечно, в будущем не будет сделан какой-либо другой вывод).

Mozilla реализует собственный JSON — Mozilla была первой, кто реализовал встроенную поддержку JSON в своем браузере. Однако обратите внимание, что это не API, доступный для веб-страниц, а API, который можно использовать из самого браузера (и с помощью расширений). Это был первый шаг, необходимый для реализации API для дальнейшего использования.

Вот пример его использования (работает в расширении, например):

var nativeJSON = Components.classes["@mozilla.org/dom/json;1"]
.createInstance(Components.interfaces.nsIJSON);

nativeJSON.encode({name: "John", location: "Boston"});
// => '{"name":"John","location":"Boston"}'

nativeJSON.decode('{"name":"John","location":"Boston"}');
// => {name: "John", location: "Boston"}

Native JSON, доступный через Интернет — последний и самый важный шаг , над которым сейчас ведется работа — способ получить доступ к кодированию и декодированию JSON с веб-страниц. Как это будет доступно, зависит от некоторых споров (поскольку конфликт имен с существующим объектом был бы очень плохим). Несмотря на это, к моменту завершения бета-версии Firefox 3 должно быть что-то в браузере.

Что важно в этом, так это то, что на самом деле это не тот случай: «О, хорошо, думаю, нам придется подождать, пока другие браузеры это реализуют». Поскольку это собственная реализация (и, следовательно, очень-очень быстрая), существующие библиотеки кодирования / декодирования JSON могут просто проверять наличие этого конкретного набора функций и использовать их напрямую — получая прямое и немедленное повышение производительности для Firefox. пользователи. Тот же принцип применим к таким функциям, как getElementsByClassName , поскольку они доступны в обычном коде JavaScript, но невероятно быстры при реализации непосредственно браузером.