Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Использование потокового API

В этом разделе описываются два варианта использования потокового API.

Здесь рассматриваются следующие темы:

Чтение данных JSON с использованием парсера

Потоковый API является наиболее эффективным подходом для парсинга текста JSON. Следующий код демонстрирует, как создать объект JsonParser и как парсить данные JSON с помощью событий:

import javax.json.Json;
import javax.json.stream.JsonParser;
...
JsonParser parser = Json.createParser(new StringReader(jsonData));
while (parser.hasNext()) {
   JsonParser.Event event = parser.next();
   switch(event) {
      case START_ARRAY:
      case END_ARRAY:
      case START_OBJECT:
      case END_OBJECT:
      case VALUE_FALSE:
      case VALUE_NULL:
      case VALUE_TRUE:
         System.out.println(event.toString());
         break;
      case KEY_NAME:
         System.out.print(event.toString() + " " +
                          parser.getString() + " - ");
         break;
      case VALUE_STRING:
      case VALUE_NUMBER:
         System.out.println(event.toString() + " " +
                            parser.getString());
         break;
   }
}

Этот пример состоит из трёх шагов.

  1. Получите объект парсера, вызвав статический метод Json.createParser.

  2. Выполните итерацию событий парсинга с помощью методов JsonParser.hasNext и JsonParser.next.

  3. Выполните локальную обработку для каждого элемента.

В примере показаны десять возможных типов событий из парсера. Метод next синтаксического анализатора продвигает его до следующего события. Для типов событий KEY_NAME, VALUE_STRING и VALUE_NUMBER вы можете получить содержимое элемента, вызвав метод JsonParser.getString. Для событий VALUE_NUMBER вы также можете использовать следующие методы:

  • JsonParser.isIntegralNumber

  • JsonParser.getInt

  • JsonParser.getLong

  • JsonParser.getBigDecimal

См. ссылку на API Java EE для интерфейса javax.json.stream.JsonParser для получения дополнительной информации.

Выходные данные этого примера следующие:

START_OBJECT
KEY_NAME firstName - VALUE_STRING Duke
KEY_NAME lastName - VALUE_STRING Java
KEY_NAME age - VALUE_NUMBER 18
KEY_NAME streetAddress - VALUE_STRING 100 Internet Dr
KEY_NAME city - VALUE_STRING JavaTown
KEY_NAME state - VALUE_STRING JA
KEY_NAME postalCode - VALUE_STRING 12345
KEY_NAME phoneNumbers - START_ARRAY
START_OBJECT
KEY_NAME type - VALUE_STRING mobile
KEY_NAME number - VALUE_STRING 111-111-1111
END_OBJECT
START_OBJECT
KEY_NAME type - VALUE_STRING home
KEY_NAME number - VALUE_STRING 222-222-2222
END_OBJECT
END_ARRAY
END_OBJECT

Запись данных JSON с помощью генератора

Следующий код демонстрирует, как записать данные JSON в файл с помощью потокового API:

FileWriter writer = new FileWriter("test.txt");
JsonGenerator gen = Json.createGenerator(writer);
gen.writeStartObject()
   .write("firstName", "Duke")
   .write("lastName", "Java")
   .write("age", 18)
   .write("streetAddress", "100 Internet Dr")
   .write("city", "JavaTown")
   .write("state", "JA")
   .write("postalCode", "12345")
   .writeStartArray("phoneNumbers")
      .writeStartObject()
         .write("type", "mobile")
         .write("number", "111-111-1111")
      .writeEnd()
      .writeStartObject()
         .write("type", "home")
         .write("number", "222-222-2222")
      .writeEnd()
   .writeEnd()
.writeEnd();
gen.close();

В этом примере получен генератор JSON путём вызова статического метода Json.createGenerator, который принимает в качестве параметра писателя или выходной поток. В этом примере данные JSON записываются в файл test.txt путём вложения вызовов в write, writeStartArray, writeStartObject и writeEnd. Метод JsonGenerator.close закрывает писателя или выходной поток.


Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)