0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Шпаргалка Java программиста 8. Библиотеки для работы с Json (Gson, Fastjson, LoganSquare, Jackson, JsonPath и другие)

Информационный портал по безопасности

Информационный портал по безопасности » Программирование » Шпаргалка Java программиста 8. Библиотеки для работы с Json (Gson, Fastjson, LoganSquare, Jackson, JsonPath и другие)

Шпаргалка Java программиста 8. Библиотеки для работы с Json (Gson, Fastjson, LoganSquare, Jackson, JsonPath и другие)

Автор: admin от 26-04-2016, 17:17, посмотрело: 1 059

В одной из моих прошлых статей я рассказывал о своем 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.

    Читать еще:  Работа с почтовым клиентом Mozilla Thunderbird
    Генерация 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)
    [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]: сложность использования,

    Обзор 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, чтобы она и дальше развивалась.

    Читать еще:  Проведення однофакторного дисперсійного аналізу за допомогою STATISTICA

    Основным классом библиотеки есть одноименный класс 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 JSON

    J SON (JavaScript Object Notation) — простой для использования формат обмена данными. JSONиспользуется в огромном числе проектов, существует множество реализаций для различных платформ. Для тех, кому по какой-то причине не нравится XML, JSON является отличной альтернативой.

    В этом руководстве мы рассмотрим три распространенные Java библиотеки, позволяющих работать с JSON данными: Jackson, Google Gson и JSON.simple.

    Jackson

    Высокопроизводительный процессор JSON данных.

    • Пример использования Jackson: Java объекты и JSON
      Пример использования объекта ObjectMapper , его методов readValue() и writeValue() для преобразования Java объектов в JSON и обратно.
    • Пример использования Jackson: Map и JSON
      Преобразования объектов типа Map (ассоциативные массивы) в JSON и обратно.
    • Пример Jackson Tree Model
      Преобразование JSON данных в древовидные объекты.
    • Jackson: пример потоковой обработки
      Пример использования объектов типа JsonGenerator и JsonParser для потокового чтения и записи JSON данных.
    • Jackson: красивое форматирование
      Пример использования метода writerWithDefaultPrettyPrinter() для получения красиво отформатированных JSON данных.
    Читать еще:  10 сервисов оптимизации изображений онлайн

    Google Gson

    Библиотека, которая изначально была разработана для внутреннего использования в компании Google, а теперь является общедоступным проектом.

    • Модель данных Gson: Java объекты и JSON
      Пример использования методов toJson() и fromJson() для преобразования Java объектов в JSON и обратно.
    • Пример потоковой обработки данных в Gson
      Пример использования объектов JsonWriter и JsonReader для потоковой обработки JSON данных.
    • Красивое форматирование в Gson
      Пример красивого форматирования JSON данных.

    JSON.simple

    Простая Java библиотека для чтения и записи JSON данных.

    • JSON.simple для чтения и записи JSON данных
      В данном примере показано, как читать из файла и записывать в файл JSON данные.

    Полезная информация

    Пример использования Jackson: Map и JSON

    В этой статье показан пример использования библиотеки Jackson для преобразования JSON-строки в Java объект типа Map и обратно. Мы рассмотрим 4 примера работы с JSON: Преобразование строки JSON в объект типа Map Преобразование объекта типа Map в JSON строку Преобразование объекта типа Map в JSON файл Преобразование JSON файла в объект типа Map Преобразование строки JSON в объект типа Map .

    JSON.simple для чтения и записи JSON данных

    JSON.simple — простая Java библиотека для работы с данными в формате JSON, полностью совместимая со спецификацией RFC4627 — The application/json Media Type for JavaScript Object Notation (JSON). При работе с библиотекой JSON.simple применяются собственные объекты для представления данных. Если Вам требуется переводить в JSON объекты своих типов данных или восстанавливать состояние объектов своих типов данных из JSON представления, то следует .

    Красивое форматирование в Gson

    В этой статье мы рассмотрим способ «человеческого» оформления JSON при использовании библиотеки Google Gson. В качестве основы возьмем пример с моделью данных и преобразования Java объектов в JSON. Если применять стандартный подход к формированию JSON данных: Gson gson = new Gson(); String json = gson.toJson(map); System.out.println(json); То результат будет следующий: <"site":"https://j4web.ru","age":2,"name":"j4web","messages":["Message 1","Message 2","Message 3"]>Для того, чтобы JSON текст был .

    Модель данных Gson: Java объекты и JSON

    JSON (JavaScript Object Notation) — простой для использования формат обмена данными, который в последнее время используется все чаще и чаще, постепенно вытесняя из определенных ниш формат XML. При разработке приложений на Java очень часто возникают задачи, связанные с переводом некоторого Java объекта (с учетом всей его, возможно, сложной структуры) в строковое представление и обратно. В этой статье мы будем рассматривать .

    Пример потоковой обработки данных в Gson

    Начиная с версии 1.6 в библиотеку Gson были добавлены два новых класса — JsonReader и JsonWriter, предназначенные для потоковой обработки JSON данных. Получить полное представление о преимуществах использования потоковой обработки данных можно прочитав официальную документацию Google Gson. В данном руководстве будут рассмотрены примеры генерации и чтения данных в формате JSON. Предназначение каждого из этих классов становится понятным из их названий: .

    Jackson: красивое форматирование

    В данном руководстве мы рассмотрим возможности библиотеки Jackson в части «красивого» (удобного для восприятия) оформления JSON объектов при выводе их в строку и на консоль. Красивое оформление JSON объектов Рассмотрим способ преобразования JSON объекта в строковое представление: ObjectMapper mapper = new ObjectMapper(); try < Map map = mapper.readValue(new File(FILENAME), new TypeReference >()<>); System.out.println(mapper.writeValueAsString(map)); > catch (IOException .

    Jackson: пример потоковой обработки

    Библиотека Jackson позволяет читать и записывать данные в формате JSON с помощью высокопроизводительного API потоковой обработки Jackson. Документацию можно найти на официальном сайте проекта. Там же описаны и все преимущества работы с потоковой обработкой. API потоковой обработки Jackson является высокопроизводительным, быстрым и удобным способом работы с данными в формате JSON, но в то же время он довольно сложен, потому что .

    Пример Jackson Tree Model

    Применяя библиотеку Jackson можно использовать так называемую технологию Tree Model (Древовидная модель) для представления данных в формате JSON, а также для выполнения чтения и изменения данных. Эти Операции выполняются посредством объекта типа TreeNode, по аналогии с технологией DOM для работы с данными в формате XML. Простой пример исходного кода показывает принцип работы с объектами типа TreeNode: // Создаем объект ObjectMapper .

  • Ссылка на основную публикацию
    Статьи c упоминанием слов:

    Adblock
    detector