JSON обработка в Java: библиотеки Jackson и Gson
JSON (JavaScript Object Notation) — это легковесный формат обмена данными, широко используемый в веб-разработке, API и микросервисах. В Java для работы с JSON существует несколько мощных библиотек, среди которых наиболее популярны Jackson и Gson. В этой статье мы подробно рассмотрим обе библиотеки, их возможности, примеры использования и особенности.
1. Библиотека Jackson
Jackson — это высокопроизводительная библиотека для обработки JSON в Java, разработанная FasterXML. Она предоставляет полный набор инструментов для сериализации, десериализации, парсинга и преобразования данных. Jackson является стандартом де-факто в экосистеме Spring.
Основные возможности Jackson:
- ObjectMapper — основной класс для преобразования Java-объектов в JSON и обратно.
- Аннотации — гибкая настройка сериализации с помощью аннотаций (
@JsonProperty,@JsonIgnore,@JsonFormat). - Поддержка Stream API — чтение и запись JSON потоков.
- Настраиваемая сериализация — возможность создания собственных сериализаторов и десериализаторов.
Пример использования Jackson:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
public class JacksonExample {
public static void main(String[] args) throws Exception {
// Создаем объект для маппинга
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
// Пример класса
Person person = new Person("Иван", 30, "ivan@example.com");
// Сериализация в JSON
String jsonString = mapper.writeValueAsString(person);
System.out.println("JSON: " + jsonString);
// Десериализация из JSON
String jsonInput = "{\"name\":\"Мария\",\"age\":25,\"email\":\"maria@example.com\"}";
Person deserializedPerson = mapper.readValue(jsonInput, Person.class);
System.out.println("Объект: " + deserializedPerson.getName());
}
}
class Person {
private String name;
private int age;
private String email;
public Person() {} // обязательный конструктор
public Person(String name, int age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
// геттеры и сеттеры
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
Подключение Jackson (Maven):
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
2. Библиотека Gson
Gson — это библиотека от Google для сериализации и десериализации Java-объектов в JSON и обратно. Она отличается простотой использования и легковесностью. Gson часто выбирают для небольших проектов и мобильной разработки на Android.
Основные возможности Gson:
- GsonBuilder — настройка поведения сериализации.
- Аннотации — поддержка
@SerializedNameдля переименования полей. - Поддержка JSON-массивов — работа с коллекциями.
- Null-обработка — опция включения/исключения null-значений.
Пример использования Gson:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;
public class GsonExample {
public static void main(String[] args) {
// Создаем Gson с форматированием
Gson gson = new GsonBuilder().setPrettyPrinting().create();
// Пример класса
Book book = new Book("Война и мир", "Лев Толстой", 1869);
// Сериализация в JSON
String jsonString = gson.toJson(book);
System.out.println("JSON: " + jsonString);
// Десериализация из JSON
String jsonInput = "{\"title\":\"Преступление и наказание\",\"author\":\"Фёдор Достоевский\",\"year\":1866}";
Book deserializedBook = gson.fromJson(jsonInput, Book.class);
System.out.println("Книга: " + deserializedBook.getTitle());
}
}
class Book {
@SerializedName("title")
private String title;
@SerializedName("author")
private String author;
@SerializedName("year")
private int year;
public Book() {}
public Book(String title, String author, int year) {
this.title = title;
this.author = author;