Шпаргалка Java программиста 8. Библиотеки для работы с Json (Gson, Fastjson, LoganSquare, Jackson, JsonPath и другие)
Обзор Gson – работаем с JSON в Java
JSON, что означает JavaScript Object Notation, – это текстовый формат обмена данными, который легко читается человеком и в то же время является компактным (в отличии от того же XML формата).
JSON произошел от javascript и очень часто используется в веб-программировании при обмене данными между веб-браузером и сервером. В самом javascript каждый валидный json объект может быть легко десериализован с помощью встроенной функции eval().
Вообще, о самом формате JSON в Интернете написано более чем достаточно, ну а в этой статье я хочу рассмотреть бибилиотеку Gson для сериализации и десериализации java объектов в JSON. Полный код примеров из статьи, оформленных в виде тест кейсов, можно найти на GitHub по этой ссылке – GsonTest.java.
А вот что нас сегодня ожидает:
Обзор библиотеки Gson
Gson – это небольшая java библиотека, которая позволяет конвертировать java объекты в их JSON представление, равно как и создавать объекты на основании их json представления.
Изначально Gson был разработан в Google и использовался в нескольких внтуренних проектах. Через некоторое время было принято решение отдать библиотеку в open-source, чтобы она и дальше развивалась.
Основным классом библиотеки есть одноименный класс Gson. Для того, чтобы создать экземпляр класса нужно воспользоваться одним из двух способов:
- Gson gson = new Gson();
- Gson gson = new GsonBuilder().create();
Первый способ создаст инстанс класса с настройками по умолчанию, а второй способ позволит применить некоторые настройки. О настройках расскажу чуть ниже.
Основные методы, которые используются для сериализации и десериализации java-объектов, называются toJson и fromJson.
Сериализация и десериализация в Gson
Начнем с чего-нибудь попроще:
Это так называемы примитивы JSON. А вот так их можно десериализовать:
Так как инстанс Gson не имеет внутреннего состояния, то его можно переиспользовать произвольное количество раз, а так же использовать в многопоточных приложениях.
Идем дальше. Вот таким образом можно сериализовать и десеарелизовать массив:
С объектами, которые в качестве полей содержат строки и примитивы, все тоже достаточно просто. Допустим, у нас в приложении описан следующий класс:
И экземпляр класса созданный таким способом:
Смотрим, что получается:
Обратите внимание, что при сериализации значение поля random не было сохранено. Все дело в том, что поведение библиотеки по-умолчанию не сериализует поля, помеченные модификатором transient. О том, как изменить это поведение, читайте в разделе про GsonBuilder.
Работа с коллекциями
Сериализация коллекций, таких как ArrayList, LinkedList, HashSet, TreeMap и других, реализована таким образом:
- метод toJson для Collection вернет массив объектов или примитивов;
- метод toJson для Map вернет ассоциативный массив.
С десериализацией все немного сложнее. Рассмотрим следующий пример:
Обратите внимание как мы определили тип для коллекции при десериализации. К сожалению, сделать это как-то проще не получится, c’est la vie.
Допустим, вам необходимо конвертировать коллекцию, содержащую объекты различных типов. В этом случае с сериализацией проблем не возникнет, например:
А вот десереализовать такую коллекцию не получится, так как Gson не сможет найти правильные соответствия для типов данных.
Одним из самых хороших решений этой проблемы будет использование низкоуровневого API – классы JsonElement, JsonPrimitive, JsonObject и так далее. Некоторое представление о том, как это сделать, вы сможете получить в следующем разделе статьи.
Определяем свои правила конвертации объектов
Gson позволяет разработчикам определять свои собственные правила для сериализации и десериализации объектов. Зарегистрировать их можно с помощью метода registerTypeAdapter().
Допустим, у нас в приложении есть следующий класс:
Для кастомного сериализатора необходимо реализовать интерфейс JsonSerializer, а для десериализаторв – соответственно JsonDeserializer. Для простоты можно создать один класс, который реализует оба эти интерфейса:
Зарегистрировать наш класс можно следующим образом:
Настройки Gson и класс GsonBuilder
В этом разделе я бы хотел мельком рассмотреть несколько настроек класса GsonBuilder.
По умолчанию результат сериализации в json будет компактным, то есть все лишние whitespace символы будут удалены. Это позволит, например, уменьшить траффик при передачи JSON объектов по сети.
Метод setPrettyPrinting у класса GsonBuilder меняет это поведение и сериализует объекты в удобную для человека форму с пробелами и переводами строк. Пример вы можете посмотреть по ссылке приведенной в начале статьи.
Еще одна полезная настройка для GsonBuilder – excludeFieldsWithModifiers. Она позволяет изменить набор несериализуемых полей при конвертации java объектов в JSON. По умолчанию игнорируются только поля с модификатором transient.
Ну вот наверное и все. Вопросы и комментарии приветствуются.
Информационный портал по безопасности
Информационный портал по безопасности » Программирование » Шпаргалка Java программиста 8. Библиотеки для работы с Json (Gson, Fastjson, LoganSquare, Jackson, JsonPath и другие)
Шпаргалка Java программиста 8. Библиотеки для работы с Json (Gson, Fastjson, LoganSquare, Jackson, JsonPath и другие)
Автор: admin от 26-04-2016, 17:17, посмотрело: 1020
В одной из моих прошлых статей я рассказывал о своем opensorce pet проекте useful-java-links, идея которого собрать как можно больше ссылок на полезные Java библиотеки и фреймворки. У него так же есть подпроект Hello World project идея которого для каждой библиотеки собрать несколько простых примеров её использования.
Проблема программистов в Java мире в том что кроме стандартной библиотеки JDK есть огромное других полезных библиотек, причем переход от одной библиотеки к другой может вызывать проблемы из-за неполной документации, отсутствия простых примеров или даже сложности понять какие зависимости нужно добавить в maven чтобы все запустилось. А на новой работе вполне могут использовать вместо твоей любимой библиотеки ту которую ты не знаешь. Идея моего проекта облегчить изучение и выбор разных библиотек.
Итак, давайте посмотрим какие известные библиотеки есть для работы с JSON в Java…
8. Работа с Json
JSON парсеры







Аналог XPath для JSON


Генерация Java классов из JSON или JSON схемы и JSON валидация


Итак, у нас восемь библиотек для сериализации и десериализации в json, две библиотеки для генерации Java классов по схеме или json файлу, одна библиотека для валидации схемы и два аналога XPath, но для json. Давайте рассмотрим каждую из них.
1. JSON парсеры
Существует три основных способа сериализации и десериализации среди указанных библиотек (от самого простого к самому сложному) и один дополнительный:
Давайте рассмотрим с чем их едят:
Data bind самый популярный и простой способ, вы просто указываете класс, который нужно преобразовать в json, может быть часть полей отмечаете аннотациями (а зачастую даже это необязательно), а библиотека сама превращает этот класс и всю его иерархию классов в json. Аналогом при работе с xml будет JAXB (Java Architecture for XML Binding)
[b]Плюсы[/b]: наиболее простой из всех, по сути главное реализовать только Java классы, более того можно просто сгенерировать Java классы из json’a или json схемы.
[b]Минусы[/b]: скорость и память. Большинство библиотек использует рефлексию и т.п. методы работы с Java классами (хотя не все), что очевидно не очень быстро. К тому же, весь json файл сразу превращается в Java объекты, что может просто исчерпать всю доступную память, если вы попытаетесь обработать очень большой json.
[b]Вывод[/b]: если нет проблем с производительностью, памятью и вы не собираетесь обрабатывать многогигабайтные json’ы скорее всего самый лучший способ.
Tree Model — данный парсер представляет json в виде Java классов таких как Node или JsonElement c иерархической структурой, а уже сам программист их обходит и получает из них информацию. Данный способ похож на DOM парсеры в xml.
[b]Плюсы[/b]: обычно быстрее первого способа и проще третьего,
[b]Минусы[/b]: уступает Data bind по простоте, плюс ряд библиотек способен генерить классы при Data bind, а не использовать рефлексию, в этом случае то что Tree Model будет быстрее не очевидно, к тому же не решается проблема огромных файлов и ограничения памяти.
Streaming API — самый низкоуровневый способ, по сути программист сам вручную разбирает токены json’a. Зато никаких ограничений по памяти и в теории максимальная производительность.
[b]Плюсы[/b]: производительность и минимальное потребление памяти,
[b]Минусы[/b]: сложность использования,
Сравниваем Java-библиотеки для работы с JSON: JSON.simple, GSON, Jackson и JSONP
Сравниваем Java-библиотеки для работы с JSON: JSON.simple, GSON, Jackson и JSONP
- Переводы , 5 июня 2015 в 0:34
JSON на сегодняшний день — общепринятый стандарт обмена данными между сервером и веб-приложением, и, что часто бывает со многими стандартами, мы можем принять его как данное, не углубляясь в принципы его работы. Зачастую мы не задумываемся о том, какие библиотеки используем для работы с JSON, хотя, безусловно, между ними есть разница. Приняв это во внимание, мы провели ряд тестов с целью узнать, насколько быстро каждая из четырёх самых популярных библиотек для работы с JSON справляется с разбором различных по размеру файлов. Теперь мы готовы поделиться с вами полученными результатами.
Часто JSON используется для передачи и разбора больших файлов. Этот сценарий распространён в приложениях для обработки данных, запущенных на кластерах Hadoop или Spark. В зависимости от размера файла можно наблюдать значительную разницу в скорости работы конкретной библиотеки. Небольшие файлы могут приходить всё время в роли запросов, их разбор происходит быстро, поэтому разница в скорости на первый взгляд не играет большой роли, но чем больше файлов вам надо обработать, тем больше эта разница. Микросервисы и распределённые приложения используют JSON для передачи такого вида файлов, т.к. это стандарт де-факто для веб API.
Не все JSON-библиотеки одинаковы — выбор подходящей под вашу задачу может быть критичен. Тесты производительности, приведённые в данной статье, помогут вам выбрать правильную библиотеку.
Библиотеки для работы с JSON
Для своих тестов мы выбрали четыре библиотеки — JSON.simple, GSON, Jackson, JSONP — исходя из их популярности на Github, именно они чаще всего используются в проектах на Java.
- JSON.simple от Yidong Fang. Небольшая и легковесная библиотека для кодирования и декодирования JSON, несмотря на свою простоту, выполняет свою работу на высоком уровне.
- GSON от Google. Библиотека, которая умеет конвертировать Java объекты в JSON и наоборот. Не требует специальным образом аннотировать классы, а также в качестве бонуса имеет полную поддержку Java Generics. Отсутствие необходимости добавления аннотаций упрощает реализацию и даже может быть главным требованием, если вы собираетесь сериализовывать объекты, не имея для них исходного кода.
- Jackson от FasterXML. Набор инструментов для обработки данных, основанный на потоковом JSON-парсере и генераторе. Предназначенная для Java библиотека умеет работать не только с JSON. Имеет самый популярный JSON-парсер (исходя из статистики использования на GitHub).
- JSONP от Oracle. API для работы с JSON, а именно для генерации и разбора потоковых JSON-текстов. Эталонная реализация JSR353 с открытым исходным кодом.
Тестирование производительности
Мы провели тесты производительности на разных по размеру файлах. Требования (а значит, и производительность) к обработке различных по размеру файлов отличаются, в то время как возникают новые окружения, в которых нам нужно обрабатывать эти файлы.
Были проверены два ключевых сценария — разбор больших (190 Мб) и маленьких (1 Кб) файлов. Большой JSON-файл был взят отсюда, маленькие были сгенерированы случайным образом с помощью http://www.json-generator.com/.
15 июня – 9 июля , онлайн, от 13 000 до 52 000 ₽
В обоих случаях был выполнен прогон каждого файла 10 раз. Для больших файлов в каждом прогоне было 10 итераций, для маленьких — 10000. Мы не оставляли маленькие файлы в памяти между итерациями. Все тесты были запущены на c3.large в облаке AWS.
Результат для больших файлов показан в таблице ниже, для маленьких в целях экономии места будут только усреднённые результаты. Подробные результаты можно посмотреть здесь. Весь исходный код доступен здесь.
Большие файлы
Здесь мы наблюдаем большую разницу в результатах. В зависимости от прогона, Jackson или JSON.simple показывают наилучшую скорость работы, в сумме по всем тестам Jackson всё же вырывается вперёд. В среднем по всем тестам, наилучшую скорость работы с большими файлами показывают Jackson и JSON.simple, далеко позади них идёт JSONP на третьем месте и GSON на четвёртом.
Взглянем на результаты под другим углом — в процентном соотношении:
Это похоже на фото-финиш — Jackson выходит из этой гонки победителем, ему в затылок дышит JSON.simple. Две другие библиотеки еле заметно маячат в зеркале заднего вида.
Маленькие файлы
В таблице выше представлены средние результаты для 10 прогонов по каждому файлу, и среднее по всем файлам внизу таблицы. Количество файлов, для которых каждая из библиотек отработала быстрее всего:
- GSON — 14
- JSONP — 5
- Jackson — 1
- JSON.simple — 0
Цифры говорят сами за себя. В любом случае, если рассматривать средние результаты по всем тестам для маленьких файлов, победителем выходит GSON, JSON.simple и JSONP занимают второе и третье место соответственно, Jackson на последнем месте. Итак, несмотря на то, что JSON.simple не был самым быстрым ни на одном из тестовых файлов, в среднем он выходит на второе место. Аналогично, хотя JSONP всех быстрее справился со многими файлами, в итоге он занимает третье место.
Нужно подметить то, что хотя Jackson в данном случае — самая медленная библиотека, он показывает похожие результаты на каждом файле, в то время как другие библиотеки в большинстве случаев демонстрируют много большую скорость работы, но на некоторых файлах скорость их работы сравнима с Jackson, или даже немного ниже.
Теперь взглянем на результаты в процентном соотношении:
GSON выигрывает гонку на маленьких файлах, JSON.simple опять показывает второй результат, немного отставая от победителя, JSONP занимает явное третье место, и, наконец, Jackson замыкает гонку.
Заключение
Скорость разбора — не единственный критерий при выборе библиотеки для работы с JSON, но один из самых важных. Выполнив описанные в статье тесты производительности, мы обнаружили, что не существует библиотеки, которая бы работала лучше остальных на файлах всех размеров. Библиотеки, которые хорошо показали себя на больших файлах, проваливались на маленьких и наоборот.
Таким образом, выбор библиотеки исходя из скорости работы зависит от конкретного случая:
- если вам часто приходится работать с большими JSON-файлами, то интересующей вас библиотекой будет Jackson. GSON испытывает наибольшие затруднения при работе с большими файлами.
- если вам приходится иметь дело с большим количеством коротких JSON-запросов (как это часто происходит в сервисах и распределённых приложениях), выбирайте GSON. Jackson справляется с большим количеством маленьких файлов хуже всего.
- если вам необходимо работать как с большими, так и с маленькими файлами, JSON.simple вам в помощь: по результатам тестов он занимает второе место для обоих типов файлов. Ни Jackson, ни GSON не могут с должной скоростью работать одновременно с разными по размеру файлами.
Когда дело касается скорости, JSONP вряд ли можно порекомендовать для какого-либо случая — он работает медленно (по сравнению с другими доступными библиотеками) как с большими, так и с маленькими файлами. К счастью, в Java 9 обещают встроить поддержку JSON, которая должна стать улучшением текущей эталонной реализации JSR353 в лице JSONP.
SavePearlHarbor
Ещё одна копия хабора
Главное меню
Навигация по записям
Шпаргалка Java программиста 8. Библиотеки для работы с Json (Gson, Fastjson, LoganSquare, Jackson, JsonPath и другие)
В одной из моих прошлых статей я рассказывал о своем opensorce pet проекте useful-java-links, идея которого собрать как можно больше ссылок на полезные Java библиотеки и фреймворки. У него так же есть подпроект Hello World project идея которого для каждой библиотеки собрать несколько простых примеров её использования.
Проблема программистов в Java мире в том что кроме стандартной библиотеки JDK есть огромное других полезных библиотек, причем переход от одной библиотеки к другой может вызывать проблемы из-за неполной документации, отсутствия простых примеров или даже сложности понять какие зависимости нужно добавить в maven чтобы все запустилось. А на новой работе вполне могут использовать вместо твоей любимой библиотеки ту которую ты не знаешь. Идея моего проекта облегчить изучение и выбор разных библиотек.
Итак, давайте посмотрим какие известные библиотеки есть для работы с JSON в Java…
8. Работа с Json
JSON парсеры
- Alibaba Fastjson Быстрый JSON обработчик, рейтинг github’а — 4851. User guide и Hello World examples. Лицензия: Apache 2.
- Gson — Простая сериализации объектов в JSON и обратно. Хорошая производительность и легкость в использовании, рейтинг github’а — 4120. User guide и Hello World examples. Лицензия: Apache 2.
- LoganSquare -Библиотека парсинга и сериализации JSON, основанная на Jackson’s streaming API. По словам разработчиков, превосходит по производительности GSON и Jackson библиотеки, рейтинг github’а — 2188. User guide и Hello World examples. Лицензия: Apache 2.
- JSON java Реализация работы с JSON в Java от разработчиков JSON стандарта, рейтинг github’а — 1937. User guide и Hello World examples. Лицензия: Crockford’s license (MIT License + “Good, not Evil”).
- Square Moshi JSON библиотека для Android и Java, служит для упрощения парсинга Json в объекты Java, рейтинг github’а — 1732. User guide и Hello World examples. Лицензия: Apache 2
- Instagram Ig json parser Быстрый JSON парсер для java проектов, рейтинг github’а — 921. User guide и Hello World examples. Лицензия: BSD 3.
- Jackson — Похоже на GSON, но более производительна, если вам нужно часто создавать экземпляр библиотеки. Подпроекты: Jackson core Базовая часть функционала, Jackson databind Базовая реализация databind’а, рейтинг github’а — 881. User guide и Hello World examples. Лицензия: Apache 2.
- Genson — Мощная и простая в использовании Java библиотека для преобразования в/из JSON, рейтинг github’а — 108. User guide и Hello World examples. Лицензия: Apache 2.
Аналог XPath для JSON
- Jayway JsonPath Java JsonPath — реализация аналога XPATH только для Json, а не XML, рейтинг github’а — 849. User guide и Hello World examples. Лицензия: Apache 2.
- Alibaba Fastjson Быстрый JSON обработчик, рейтинг github’а — 4851. User guide и Hello World examples. Лицензия: Apache 2.
Генерация Java классов из JSON или JSON схемы и JSON валидация
- Jsonschema2pojo Генерация Java классов из JSON схемы (или примера JSON) с аннотациями для data-binding для Jackson 1.x or 2.x, Gson и т. п. рейтинг github’а — 1664. User guide и Hello World examples. Лицензия: Apache 2.
- Json schema validator Валидация JSON схемы, реализована на чистой Java, создана с целью проверки Json файлов, используя Json схемы., так же может генерировать Java классы из схемы и наоборот, рейтинг github’а — 547. User guide и Hello World examples. Лицензия: GNU Lesser 3/Apache 2.
Итак, у нас восемь библиотек для сериализации и десериализации в json, две библиотеки для генерации Java классов по схеме или json файлу, одна библиотека для валидации схемы и два аналога XPath, но для json. Давайте рассмотрим каждую из них.
1. JSON парсеры
Существует три основных способа сериализации и десериализации среди указанных библиотек (от самого простого к самому сложному) и один дополнительный:
- Data bind,
- Tree Model,
- Streaming API,
- (И дополнительный способ) Аналоги XPath,
Давайте рассмотрим с чем их едят:
Data bind самый популярный и простой способ, вы просто указываете класс, который нужно преобразовать в json, может быть часть полей отмечаете аннотациями (а зачастую даже это необязательно), а библиотека сама превращает этот класс и всю его иерархию классов в json. Аналогом при работе с xml будет JAXB (Java Architecture for XML Binding)
Плюсы: наиболее простой из всех, по сути главное реализовать только Java классы, более того можно просто сгенерировать Java классы из json’a или json схемы.
Минусы: скорость и память. Большинство библиотек использует рефлексию и т.п. методы работы с Java классами (хотя не все), что очевидно не очень быстро. К тому же, весь json файл сразу превращается в Java объекты, что может просто исчерпать всю доступную память, если вы попытаетесь обработать очень большой json.
Вывод: если нет проблем с производительностью, памятью и вы не собираетесь обрабатывать многогигабайтные json’ы скорее всего самый лучший способ.
Tree Model — данный парсер представляет json в виде Java классов таких как Node или JsonElement c иерархической структурой, а уже сам программист их обходит и получает из них информацию. Данный способ похож на DOM парсеры в xml.
Плюсы: обычно быстрее первого способа и проще третьего,
Минусы: уступает Data bind по простоте, плюс ряд библиотек способен генерить классы при Data bind, а не использовать рефлексию, в этом случае то что Tree Model будет быстрее не очевидно, к тому же не решается проблема огромных файлов и ограничения памяти.
Streaming API — самый низкоуровневый способ, по сути программист сам вручную разбирает токены json’a. Зато никаких ограничений по памяти и в теории максимальная производительность.
Плюсы: производительность и минимальное потребление памяти,
Минусы: сложность использования,
Урок 14. Знакомство с форматом JSON. Парсинг JsonObject на примере объекта User
В этом уроке мы с вами более подробно познакомимся с форматом JSON . А потом из этого формата получим наш User объект.
JSON стал общепринятым форматом для обмена данными в клиент-серверных приложения. Он является универсальным форматом для обмена данными.
Представьте, что вам нужно создать систему приложений, в которую входит, сервер, web -клиент, ios -клиент, android -клиент. У всех технологий разные языки,
разные особенности. Поэтому сервер отвечает в формате JSON , а клиенты на своей стороне приводят к нужному формату ответы. Подробнее про JSON формат можно
почитать здесь, но на данном этапе ваших знаний уже вполне хватит.
JSONObject, работа с JSON в java коде
Давайте создадим новый класс в пакете network и назовём его JsonParser для преобразования Json -строк в необходимые нам объекты. Добавим в него один
метод, который назовём getUser(String response) :
Мы будем использовать этот метод внутри класса HttpClient , передавая в него ответ от сервера в формате String , возвращая объект User . Давайте
разберём преобразование, рассмотрим структура хранения JSON . В прошлом уроке мы в конце вывели ответ от сервера в log и увидели очень большой объект JSON .
На данном этапе нам необходимы только те поля, которые мы отображаем на экране. Поэтому опустим остальные поля и оставим только те, которые нам нужны:
Видим, что наш JSON полностью повторяет структуру нашего объекта User . Теперь можно приступить к парсингу (преобразованию) данных.
Первое, что необходимо сделать – это создать JSON объект из строки:
Видим, что AndroidStudio подчёркивает эту строку, указывая что надо обработать исключение или добавить его к сигнатуре метода. Можем нажать alt + enter
и увидеть два этих варианта решения проблемы. Добавим исключение к сигнатуре, чтобы обработать исключения в клиентском коде. Для этого выберем вариант Add exception to method signature :
JSONObject представляет из себя структуру типа HashMap (ключ – значение).
Т.е. чтобы получить значения поля id нам необходимо выполнить вызов метода
userJson.getLong(“id”) (получить значение типа long по ключу (названию поля) id ). Давайте сделаем тоже самое для каждого поля.
После этого метод будет выглядеть так:
Т.е. вот так по названию поля мы можем достать его значение. Нам попался самый простой случай, где наши значения являются примитивными типами. На практике мы
поработаем с массивами элементов и вложенными объектами.
Давайте создадим объект User , передав ему в конструктор все поля, которые мы только что достали из userJson :
Вот и всё! Теперь давайте добавим использование нашего класса внутри класса HttpClient .
Генерация и обработка JSON в JavaEE
Сегодня довольно сложно встретить веб-приложение или мобильное приложение, использующее для обмена информацией с бэкендами и сторонними системами формат данных, отличный от JSON.
Многие знают, что среди его основных преимуществ отмечаются такие, как простота, отсутствие избыточности при передаче (в сравнении с XML) и как следствие легковесность. На клиентской стороне, написанной на JavaScript или одном из его фреймворков, работа с JSON крайне проста и равносильна работе с обычным JS-объектом.
В качестве примера, обратимся к ресурсу Api.ipify.org, возвращающего клиентский IP-адрес в виде JSON-объекта, который присвоим некоторой переменной:
Как видно из примера, объект имеет единственное поле «ip», значение которого равно 46.0.6.174 . Для получения значения из этого поля JS код выглядит крайне просто:
Представим ситуацию
Предположим, если бы данный сервис в качестве технологического стека использовал бы платформу JavaEE. Для Java-разработчиков, имеющих опыт работы с JSON, хорошо известны такие библиотеки, как Gson, Jackson и прочие, которые отлично подходят для работы с этим форматом данных.
Однако поддержка API для работы с JSON в JavaEE из «коробки» зарегистрирована под JSR 353 и реализована, начиная с 7й версии. Основным пакетом является javax.json , в котором располагаются все необходимые классы и интерфейсы для работы с JSON.
Для описания приведённого выше примера с IP-адресом понадобиться простой класс IPAddress:
Для конвертации объекта данного класса в JSON-строку понадобится создать экземпляр JsonObjectBuilder и добавить необходимые поля, используя метод «add»:
Обратите внимание, что у метода «add» имеется достаточное количество перегруженных версий, позволяющих передавать значения различных типов в качестве второго значения второго аргумента. Для получения строкового значения на выходе достаточно выполнить:
И этого по факту достаточно для получения строки из примера выше! Если же в качестве полей JSON-объекта также используются массивы, то для этого используются возможности класса JsonArrayBuilder, проинициализировав который необходимо передать в objectBuilder в качестве второго параметра.
Для полноты картины, также рассмотрим случай
Ситуация: парсинг JSON-строки выполняется средствами JavaEE, при этом на выходе получив Java-объект. Здесь также никаких сложностей нет:
Для получения значения полей, представленных в виде массивов, используется:
В принципе, этих знаний достаточно, чтобы начать использовать встроенные механизмы JavaEE для генерации и обработки JSON в ваших приложениях без необходимости использования сторонних библиотек.
Есть вопрос? Напишите в комментариях!