Введение в 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, поэтому вас может заинтересовать следующее:
- Внедрение контекста и зависимости (CDI)
- Enterprise Java Beans (EJB)
- JSP, JSP и язык выражений
- RESTful веб-сервисы
Опубликовано на Java Code Geeks с разрешения Алекса Тидома, партнера нашей программы JCG. См. Оригинальную статью здесь: Что такое JSON Processing (JSON-P API)?
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |