вторник, 5 декабря 2006 г.

JSON (JavaScript Object Notation)

Изучая различные расширения для Blog'ов, обратил внимание, что Google стал использовать JSON как альтернативу XML при обмене данными. Решил познакомиться с ним поближе. Посмотреть, как выглядят записи, отформатированные JSON в сравнении с XML, можно тут. Существует RFC #4627, описывающий этот стандарт.

Согласно Википедии:

JSON (англ. JavaScript Object Notation) — это легкий формат обмена данными. Отличительной чертой является то, что он легкочитаем для человека. Этот формат легко обрабатывается и генерируется программами. Он основан на языке JavaScript, Standard ECMA-262 3rd Edition — December 1999.

JSON — это текстовый формат, не зависящий от языка программирования. JSON использует соглашения близкие к Си-подобным языкам, включая C, C++, C#, Java, JavaScript, Perl, Python, и много других. Все это делает JSON идеальным языком для обмена данными.

JSON строится на двух структурах:

  • Набор пар имя/значение. В различных языках это реализовано как объект, запись, структура, словарь, хеш-таблица, список с ключом или ассоциативный массив.
  • Упорядоченный список значений. Во многих языках это реализовано как массив, вектор, список, или последовательность.

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

В JSON используются их следующие формы:

  • Объект — это неупорядоченное множество пар имя/значение. Объект начинается с символа { и заканчивается символом }. Каждое значение следует за : и пары имя/значение отделяются запятыми.
  • Массив — это упорядоченное множество значений. Массив начинается символом [ и заканчивается символом ]. Значения отделяются запятыми.
  • Значение может быть строкой в двойных кавычках, или числом, или true, или false, или null, или объектом, или массивом. Эти структуры могут быть вложены друг в друга.
  • Строка — это упорядоченное множество из нуля или более символов юникода, заключенные в двойные кавычки, с использованием escape-последовательностей начинающихся с обратной косой черты (backslash). Символы представляются простой строкой.

Подробнее можно посмотреть на сайте, посвященном описанию нового формата. Там же можно найти ссылки на библиотеки, реализующие JSON, для большого количества языков и другие проекты, использующие этот формат. Для меня интересными оказались:

json-xslt

An XSLT 1.0 stylesheet that can transform any XML file into JSON. You can use the stylesheet along with a server-based XSLT transform tool, such as eBay's XSLT server that works with the REST API. You could also use it with client-side tool, if you are into that kind of thing.

Отличная статья Генерирование JSON из XML для использования с Ajax:

Несколько лет назад многие разработчики сделали ставку на XML, XSLT, Extensible HTML (XHTML) и набор основанных на тегах "X"-языков. Сейчас новой страстью является Asynchronous JavaScript and XML (AJAX), и инвесторы обратили взгляд в сторону управляемых данными полнофункциональных Интернет-приложений (Rich Internet Applications), использующих JavaScript-код. Но объединили ли разработчики XML и эту новую технологию?

Конечно, вы могли бы использовать синтаксический анализатор XML в Web-клиенте для чтения данных, но при этом возникают две проблемы. Во-первых, в целях защиты XML-данные могут читаться только из того же домена, которому принадлежит страница. Это не слишком весомый ограничивающий фактор, но он является причиной некоторой головной боли при разработке, а также затрудняет создание DHTML-виджетов. Во-вторых, чтение и синтаксический анализ XML являются медленными процедурами.

Другим вариантом является разрешение серверу выполнить работу по синтаксическому анализу XML путем конфигурирования его на передачу в браузер данных, закодированных в виде JavaScript-кода, или в более модном стиле - JavaScript Object Notation (JSON). В данной статье я демонстрирую три способа генерирования JSON из XML-данных, используя язык XSLT V2 и процессор Saxon XSLT V2:

  • Простое кодирование.
  • Загрузка данных через вызовы функций.
  • Кодирование объектов.

Стандарт JSON-RPC, аналог XML-RPC для удаленного вызова процедур.

Как я писал выше много наработок, использующих JSON у Google: Using JSON with Google Data APIs, JSON RPC Example Project, JSON Interop Using JSNI, Google Data APIs - JSON Samples и другие.

На оригинальном сайте приводится его сравнение с XML. По словам разработчиков (перевод мой):

XML является превосходным языком описания данных... Но, к сожалению, XML не очень хорошо подходит для обмена данными, как гаечный ключ плохо подходит для забивания гвоздей. XML содержит много багажа и не соответствует модели данных большинства языков программирования. Многие программисты, видя XML в первый раз, бывают шокированы тем, насколько он уродлив и неэффективен. Похоже, что эта первая реакция и является истинной на самом деле. Существует другая текстовая нотация, имеющая все преимущества XML, но более приспособленная для обмена данными. Это JSON...

Существует много обоснованных точек зрения (для примера прочитайте этот документ) утверждающих, что XML очень проблематично использовать как формат обмена данными, но все его недостатки покрываются его переносимостью и открытостью.

JSON предлагает те же преимущества переносимости и открытости, но без недостатков. Давайте, сравним XML и JSON по качествам, которые XML сообщество считает наиболее важными.

Само сравнение достаточно длинное и желающих с ним ознакомится отправляю к этой статье: JSON: The Fat-Free Alternative to XML

Из различных open source реализаций для .NET мне приглянулся Jayrock:

Jayrock is a modest and an open source (LGPL) implementation of JSON and JSON-RPC for the Microsoft .NET Framework, including ASP.NET. What can you do with Jayrock? In a few words, Jayrock allows clients, typically JavaScript in web pages, to be able to call into server-side methods using JSON as the wire format and JSON-RPC as the procedure invocation protocol. The methods can be called synchronously or asynchronously.

Compatibility & compliance:

Microsoft Windows Linux Microsoft .NET Framework Mono Python Microsoft Internet Explorer FireFox Opera Open Source (OSI) Certified

Technorati tags: , ,
Blogus tags : ,,

1 комментарий

Анонимный комментирует...

Ну json так json.. Полюбому приятней выглядит и быстрее обробатывается... XML - думаю в скором времени не выдержит конкуренции с json