Изучаем Java EE 7 - [193]

Шрифт
Интервал


Таблица 12.9. Терминология JSON
ТерминологияОписание
ЧислоЧисло в JSON очень похоже на таковое в Java, за исключением того, что в JSON не могут применяться восьмеричные и шестнадцатеричные значения
СтрокаСтрока — это последовательность из нуля или более символов Unicode, ограниченная двойными кавычками, использующая для экранирования символ обратного слеша
ЗначениеЗначение в JSON может быть представлено в одном из следующих форматов: строка в двойных кавычках, число, двоичное значение, объект или массив
МассивМассив — это упорядоченный набор значений. Квадратные скобки ([,]) обозначают начало и конец массива. Значения массива разделены запятыми (,) и могут быть объектами
ОбъектJSON и Java имеют одинаковое определение объекта. В JSON объект — это неупорядоченный набор пар «имя/значение». Фигурные скобки ({,}) обозначают начало и конец объекта. Пары «имя/значение» в JSON разделяются запятыми (,) и представляют атрибуты POJO в Java

Двоеточие в JSON используется в качестве разделителя имен, а запятая — в качестве разделителя значений. Корректные данные JSON представляют собой сериализованный объект или массив структур данных, которые могут быть вложенными. Например, объект JSON может содержать массив JSON. В примере, приведенном выше (см. листинг 12.14), content — это объект, который содержит массив order_line.

Обзор спецификаций JSON

JSON наследуется от объектных литералов JavaScript. JSON был представлен в качестве RFC 4627 в IETF (Internet Engineering Task Force — Инженерный совет Интернета) в 2006 году. IETF является открытым международным сообществом проектировщиков сетей, исследователей, операторов и продавцов, продвигающих эволюцию архитектуры Интернета.

Официальный тип содержимого JSON — application/json (см. главу 15 о веб-службах RESTful), а расширение имен файлов JSON —.json. Хотя JSON в настоящее время не является рекомендацией W3C, многие спецификации W3C и API прямо или косвенно основаны на JSON или используют этот формат, например JSON-LD, JSONPath, JSONT и JSONiq. Кроме того, большое количество языков программирования внедрили API для анализа и генерации данных в формате JSON.

Java имеет несколько реализаций для обработки, преобразования, сериализации/десериализации или генерации данных JSON, например JSON-Lib, fastjson, Flexjson, Jettison, Jackson и т. д. (посетите сайт http://json.org, на котором перечислены несколько Java API для работы с JSON); каждый из них полезен для разных сценариев.

Чтобы предоставить стандартный Java API для обработки JSON, JSR 353 (Java API для обработки JSON) был отправлен в JCP в 2011 году и был выпущен с Java EE 7.

JSON-P

Java API для обработки JSON (JSR 353), известный как JSON-P, — это спецификация, которая позволяет обрабатывать JSON в Java. Обработка включает в себя механизмы для анализа, создания, преобразования и запроса данных JSON. JSON-P представляет собой стандарт построения объектов Java с JSON с использованием API, похожего на DOM для XML. В то же время он обеспечивает механизм производства и потребления JSON с помощью потоков, аналогично StAX для XML.

Хотя это не является строгим требованием в оригинальном JSR, некоторые реализации JSON-P могут также обеспечить связывание данных JSON с объектами Java и наоборот (но это будет указано в будущем JSR, которое можно было бы назвать JSON-B, где B означает binding («связывание»)). В табл. 12.10 перечислены важные пакеты JSON-P.


Таблица 12.10. Пакеты JSON-P
ПакетОписание
javax.jsonПредоставляет API для описания структуры данных JSON (например, класс JsonArray для массива JSON и класс JsonObject для объекта JSON), предоставляет точку входа для анализа, построения, чтения и записи объектов и массивов JSON с помощью потоков
javax.json.spiИнтерфейс провайдера служб (Service Provider Interface) служит для подключения реализаций JsonParser и JsonGenerator
javax.json.streamПредоставляет потоковый API для анализа и генерации JSON

Пример реализации

Несколько обработчиков JSON реализовано в Java, открытый исходный код для реализации JSON-P (JSR 353) имеет JSON RI.

Обработка JSON

JSON-P предоставляет две различные модели программирования для обработки JSON-документов: API объектной модели, а также потоковый API. Как и в DOM API для XML, API объектной модели обеспечивает классы для модели JSON-объектов и массивов в древовидной структуре, которые представляют JSON-данные в памяти. Как и в случае DOM API, API объектной модели обеспечивает гибкую навигацию и запрашивает все дерево содержимого.

Потоковый API — это низкоуровневый API, предназначенный для эффективной обработки больших объемов данных JSON. Потоковый API очень похож на StAX API для XML. Это дает возможность потоку JSON не сохранять весь документ в памяти. Потоковый API предоставляет основанный на событиях анализатор потоковой модели, что позволяет пользователю обрабатывать или отменять события анализатора, а также запрашивать следующее событие (вытягивать его). Генератор JSON также поможет вам записать JSON с помощью потоков.

JSR 353 имеет основной API javax.json.Json, который представляет собой класс для создания объектов, обрабатывающих JSON. Этот центральный API имеет методы создания объектов типа JsonParser, JsonGenerator, JsonWriter, JsonReader, JsonArrayBuilder и JsonObjectBuilder.


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.