Статьи

Что такое обработка JSON (JSON-P API)?

Введение в JSON-P в Java EE

Java API для JSON Processing 1.0 ( JSR 353 ) — это низкоуровневый, облегченный анализатор JSON и генератор, который обеспечивает эту возможность для манипулирования данными JSON на уровне свойств и значений.

JSR 353 предоставляет две модели обработки JSON: объектную модель и потоковую модель. Обе модели могут генерировать данные JSON и выводить их в поток, такой как плоский файл, и обе модели могут читать данные. Однако потоковая модель особенно эффективна при обработке больших объемов данных JSON. Это позволяет реализовать функции импорта данных и преобразования таких данных на лету.

Однако потоковая модель особенно эффективна при обработке больших объемов данных JSON. Это позволяет реализовать функции импорта данных и преобразования таких данных на лету.

Объектная модель JSON-P

Пакет javax.json предоставляет API объектной модели для обработки данных JSON. Он включает в себя классы, которые моделируют структуру JSON и фабрики для читателей и авторов JSON.

Модель объектов представляет элементы, которые формируют структуру данных JSON, в виде объектов. Например, массив JSON представлен классом javax.json.JsonArray , и, в свою очередь, этот класс реализует интерфейс List .

Объект JSON представлен классом javax.json.JsonObject, который реализует интерфейс Map .

Класс javax.json.Json включает в себя различные фабричные методы, которые, среди прочего, создают экземпляры JsonGenerator , JsonParser и JsonReader .

Следующий фрагмент кода создает экземпляр JSONObject из документа JSON, а затем извлекает данные из его свойств.

1
2
3
4
5
6
7
8
1: private String json = "{\"id\": 123456, \"title\": \"Fun with JSON-Processing\", \"published\": true}";
 
2: JsonReader jsonReader = Json.createReader(new StringReader(json));
3: JsonObject jsonObject = jsonReader.readObject();
4: jsonReader.close();
5: jsonObject.getInt("id")
6: jsonObject.getString("title")
7: jsonObject.getBoolean("published")

Строка 1 — это документ JSON, который я хочу обработать. Я создаю экземпляр объекта StringReader и передаю ему документ JSON, который я передаю в JsonReader через статический метод createReader () .

Я прочитал документ JSON в экземпляр JsonObject в строке 3 и закрыл читателя в строке 4.

Теперь, когда у меня есть JsonObject, я могу прочитать значения свойств JSON, передав имя свойства методу getString () .

Код для этого примера хранится в репозитории GitHub, который сопровождает этот пост.

Потоковая модель JSON-P

Пакет javax.json.streaming предоставляет API модели потоковой передачи, который анализирует и генерирует данные JSON. В него входят фабрики по созданию парсеров и генераторов.

Это реализовано совсем по-другому и на более низком уровне. По сути, существуют две основные фабрики, которые генерируют и анализируют данные JSON. Это JsonGeneratorFactory и JsonParserFactory . Эти фабрики ориентированы на запись и чтение из потоков данных.

Запись данных JSON выполняется с помощью цепочки методов, которые добавляют данные в буфер, а затем сбрасывают их в выходной поток, вызывая методы flush или close.

Данные JSON анализируются в потоковом режиме и предназначены для наиболее эффективного способа чтения данных JSON. Парсеры создаются из входных источников InputStream или Reader .

Следующий фрагмент кода создает экземпляр JSONObject, создав его с помощью методов построителя в JsonObjectBuilder, а затем извлекает данные из JsonObject .

1
2
3
4
5
6
7
8
9
1: JsonObject jsonObject = Json.createObjectBuilder()
        .add("id", 123456)
        .add("title", "Fun with JSON-Processing")
        .add("published", true)
        .build();
 
2: jsonObject.getInt("id")
3: jsonObject.getString("title")
4: jsonObject.getBoolean("published")

По строке 1 построен JsonObject . Как вы можете видеть, он вызывает статический метод createObjectBuilder () из класса Json, и я вызываю метод add для такого количества свойств, которое требуется для моего JsonObject . В этом случае я хочу три свойства: идентификатор, заголовок и опубликовано. Последний метод — это метод build (), который создает JsonObject .

Строки со 2 по 4 вызывали методы getter для сборки JsonObject в строке 1 и извлекали значения свойств по одному, как я это делал в предыдущем примере.

Код для этого примера хранится в репозитории GitHub, который сопровождает этот пост.

Что дальше?

Если вам понравилась эта статья, вам понравится мой новый курс JSON Processing с Java EE, который я записал для Lynde.com. В этом курсе я рассмотрю весь API, рассматривая его как модели Object и Streaming. Я использую множество примеров кода и ставлю перед вами задачи, которые помогут вам улучшить ваше обучение.

Дальнейшее чтение

Я часто пишу о технологиях Java EE, поэтому вас может заинтересовать следующее:

Опубликовано на Java Code Geeks с разрешения Алекса Тидома, партнера нашей программы JCG. См. Оригинальную статью здесь: Что такое JSON Processing (JSON-P API)?

Мнения, высказанные участниками Java Code Geeks, являются их собственными.