Изучаем Java EE 7 - [194]
Построение JSON
Структуры объекта и массива в JSON представлены классами javax.json.JsonObject и javax.json.JsonArray. API позволяет перемещаться и запрашивать древовидную структуру данных.
Класс JsonObject имеет словарный вид для доступа к неупорядоченному набору из нуля или более пар «имя/значение». Аналогично JSONArray предоставляет списковый вид для доступа к упорядоченной последовательности из нуля или более значений. API использует строительные шаблоны для создания древовидного представления JsonObject и JSONArray с помощью интерфейсов javax.json.JsonObjectBuilder и javax.json.JsonArrayBuilder.
В листинге 12.15 показано, как построить заказ в JSON, приведенный выше (см. листинг 12.14). Как видите, класс Json используется для создания объектов типов JsonObjectBuilder и JsonArrayBuilder, которые в конечном итоге создадут объект типа JsonObject (с применением финального метода build()). JsonObject предоставляет словарный вид для преобразований пар «имя/значение» объекта JSON.
>public class OrderJsonBuilder {
>··public JsonObject buildPurchaseOrder() {
>····return··Json.createObjectBuilder(). add("order", Json.createObjectBuilder()
>············.add("id", "1234")
>············.add("date", "05/06/2013")
>············.add("customer", Json.createObjectBuilder()
>················.add("first_name", "Джеймс")
>················.add("last_name", "Роррисон")
>················.add("email", "[email protected]")
>················.add("phoneNumber", "+44 1234 1234"))
>············.add("content", Json.createObjectBuilder()
>················.add("order_line", Json.createArrayBuilder()
>····························.add(Json.createObjectBuilder()
>····································.add("item", "H2G2")
>····································.add("quantity", "1")
>····································.add("unit_price", "23.5"))
>····························.add(Json.createObjectBuilder()
>····································.add("item", "Гарри Поттер")
>····································.add("quantity", "2")
>····································.add("unit_price", "34.99"))))
>············.add("credit_card", Json.createObjectBuilder()
>····················.add("number", "1357")
>····················.add("expiry_date", "10/13")
>····················.add("control_number", "234")
>····················.add("type", "Visa"))). build();
>··}
>}
Объект типа JsonObject также можно создать из источника входных данных (например, InputStream или Reader), используя интерфейс javax.json.JsonReader. В следующем примере показано, как считывать и создавать объект типа JsonObject с помощью интерфейса JsonReader. JsonReader создается из файла order.json (см. листинг 12.14). Затем, чтобы получить доступ к объекту order, вызывается метод getJsonObject(), который возвращает JsonObject. Если объект не найден, возвращается значение null:
>JsonReader reader = Json.createReader(new FileReader("order.json"));
>JsonObject jsonObject = reader.readObject();
>jsonObject = jsonObject.getJsonObject("order");
JsonReader также предоставляет общий метод read() для чтения любого подтипа javax.json.JsonStructure (JsonObject и JSONArray). Использование метода JsonStructure.getValueType() возвращает объект типа ValueType (ARRAY, OBJECT, STRING, NUMBER, TRUE, FALSE, NULL), а затем вы можете считать значение. Метод toString() типа JsonStructure возвращает JSON представление объектной модели.
Аналогично JsonObject и JSONArray можно записать в выходной источник (например, OutputStream или Writer) с помощью класса javax.json.JsonWriter. Метод-строитель Json.createWriter() может создать объект типа JsonWriter для различных типов вывода.
Анализ JSON
Потоковый API (пакет javax.json.stream) облегчает анализ JSON с помощью потоков, обеспечивая последовательный доступ только для чтения. Он предоставляет интерфейс javax.json.stream.JsonParser для анализа документов JSON. Точкой входа является класс-фабрика javax.json.Json, который имеет метод createParser(), возвращающий объект типа javax.json.stream.JsonParser из указанного источника входного сигнала (например, Reader или InputStream). К примеру, анализатор JSON, предназначенный для анализа пустого объекта JSON, можно создать следующим образом:
>StringReader reader = new StringReader("{}");
>JsonParser parser = Json.createParser(reader);
Вы можете настроить анализатор, передав в его метод createParserFactory() свойство Map. Эта фабрика создает объект типа JsonParser, сконфигурированный специально для анализа ваших данных JSON:
>StringReader reader = new StringReader("{}");
>JsonParserFactory factory = Json.createParserFactory(properties);
>JsonParser parser = factory.createParser(reader);
JsonParser основан на потоковой модели «активный синтаксический анализ». Это означает, что анализатор генерирует событие, когда достигнуто имя/значение JSON или считаны начало/конец массива/объекта. В табл. 12.11 перечислены все события, вызываемые анализатором.
Пакет | Описание |
---|---|
START_OBJECT | Событие для начала объекта JSON (генерируется, когда считан символ «{») |
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.