1. Обзор
Работать с данными JSON в Java может быть легко , но, как и во всем остальном в Java, существует множество опций и библиотек, из которых мы можем выбирать.
Это руководство должно облегчить этот выбор и дать вам четкое представление об экосистеме прямо сейчас. Мы обсудим наиболее распространенные библиотеки обработки JSON в Java:
Мы придерживаемся простой структуры для каждой библиотеки — сначала несколько полезных ресурсов для начала работы (как здесь, в ForEach, так и извне). Затем мы рассмотрим базовый пример кода , просто чтобы увидеть, как на самом деле выглядит работа с библиотекой.
2. Популярность и базовая статистика
Во-первых, давайте начнем с некоторой статистики в качестве показателя популярности каждой библиотеки:
2.1. Джексон
- Использование Maven: привязка данных ( 2362 ), ядро ( 1377 )
- Звезды Гитхаба : 1457
- Вилки Github: 585
2.2. Гсон
- Использование Мейвена : 1 588
- Звезды Гитхаба : 2079
- Вилки Github: 471
2.3. json-io
- Использование Мейвена : 11
- Звезды Github : 129
- Вилки Github: 40
2.4. Генсон
- Использование Мейвена : 8
- Звезды Гитхаба : 67
- Вилки Github: 15
3. Джексон
Далее давайте посмотрим на самого популярного из них — Джексона. Jackson — многоцелевая библиотека Java для обработки данных JSON.
3.1. Полезные ресурсы
Вот несколько официальных ресурсов для библиотеки:
В ForEach:
- Учебник по Джексону
- Джексон Дата
- Джексон Просмотры JSON
- Путеводитель по аннотациям Джексона
- Исключения Джексона – проблемы и решения
- Джексон — Решите, какие поля будут сериализованы/десериализованы
- Джексон - Двунаправленные отношения
- Джексон — Пользовательский сериализатор
- Джексон — Пользовательский десериализатор
Другие интересные записи:
- Jackson JSON Processing API в учебном пособии по Java
- Джексон — ObjectMapper
- Джексон 2 — Преобразование объекта Java в / из JSON
3.2. Зависимость от Maven
Чтобы использовать библиотеку — вот зависимость Maven для добавления в ваш pom.xml
:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
Обратите внимание, что последняя версия Джексона на данный момент — 2.13 .
3.3. Простой пример с Джексоном
Теперь давайте посмотрим, как использовать Джексона на простом примере:
@Test
public void whenSerializeAndDeserializeUsingJackson_thenCorrect()
throws IOException{
Foo foo = new Foo(1,"first");
ObjectMapper mapper = new ObjectMapper();
String jsonStr = mapper.writeValueAsString(foo);
Foo result = mapper.readValue(jsonStr, Foo.class);
assertEquals(foo.getId(),result.getId());
}
Обратите внимание, что:
ObjectMapper.writeValueAsString()
используется для сериализации объекта в строку JSON.ObjectMapper.readValue()
используется для десериализации строки JSON в объект Java.- Пример вывода JSON:
{
"id":1,
"name":"first"
}
4. Гсон
Gson — это следующая библиотека Java JSON, которую мы собираемся рассмотреть.
4.1. Полезные ресурсы
Вот несколько официальных ресурсов для библиотеки:
В ForEach:
Другие интересные записи:
- Стратегия исключения Gson
- Пользовательский сериализатор/десериализатор Gson
- Учебник по Java Gson + JSON с примерами
4.2. Зависимость от Maven
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${gson.version}</version>
</dependency>
Обратите внимание, что последняя версия Gson на данный момент — 2.8.8 .
4.3. Простой пример с Gson
Вот простой пример, поясняющий, как использовать Gson для сериализации/десриализации JSON:
@Test
public void whenSerializeAndDeserializeUsingGson_thenCorrect(){
Gson gson = new Gson();
Foo foo = new Foo(1,"first");
String jsonStr = gson.toJson(foo);
Foo result = gson.fromJson(jsonStr, Foo.class);
assertEquals(foo.getId(),result.getId());
}
Обратите внимание, что:
Gson.toJson()
используется для сериализации объекта в JSON .Gson.fromJson()
используется для дериализации JSON в объект Java.
5. Json-ио
Json-io — это простая библиотека Java для сериализации/десериализации JSON.
5.1. Полезные ресурсы
Вот несколько официальных ресурсов для библиотеки:
5.2. Зависимость от Maven
<dependency>
<groupId>com.cedarsoftware</groupId>
<artifactId>json-io</artifactId>
<version>${json-io.version}</version>
</dependency>
Обратите внимание, что последняя версия json-io на данный момент — 4.13.0 .
5.3. Простой пример с json-io
Теперь давайте рассмотрим простой пример использования json-io:
@Test
public void whenSerializeAndDeserializeUsingJsonio_thenCorrect(){
Foo foo = new Foo(1,"first");
String jsonStr = JsonWriter.objectToJson(foo);
Foo result = (Foo) JsonReader.jsonToJava(jsonStr);
assertEquals(foo.getId(),result.getId());
}
Обратите внимание, что:
JsonWriter.objectToJson()
используется для сериализации объекта в JSON.JsonReader.jsonToJava()
используется для десериализации Json в объект Java.- Пример вывода JSON:
{
"@type":"org.foreach.Foo",
"id":1,
"name":"first"
}
6. Генсон
Genson — это библиотека преобразования Java и Scala в JSON, обеспечивающая полную привязку данных и потоковую передачу.
6.1. Полезные ресурсы
Вот несколько официальных ресурсов для библиотеки:
- Официальный сайт Генсона
- Генсон на Github
- Генсон Руководство пользователя
- Формат Genson JSON для байтовых массивов
6.2. Зависимость от Maven
<dependency>
<groupId>com.owlike</groupId>
<artifactId>genson</artifactId>
<version>${genson.version}</version>
</dependency>
Обратите внимание, что последняя версия Genson на данный момент — 1.6.
6.3. Простой пример с Генсоном
Вот простой пример работы с библиотекой:
@Test
public void whenSerializeAndDeserializeUsingGenson_thenCorrect(){
Genson genson = new Genson();
Foo foo = new Foo(1,"first");
String jsonStr = genson.serialize(foo);
Foo result = genson.deserialize(jsonStr, Foo.class);
assertEquals(foo.getId(),result.getId());
}
Обратите внимание, что:
Genson.serialize()
используется для сериализации объекта в JSON .Genson.desrialize()
используется для десериализации JSON в объект Java.
7. Заключение
В этой краткой обзорной статье мы узнали о наиболее распространенных библиотеках обработки JSON в Java.