Работа с JSON в Java: парсинг и сериализация объектов

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с JSON в Java: парсинг и сериализация

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

1. Что такое JSON и зачем он нужен в Java?

JSON представляет собой текстовый формат, основанный на парах "ключ-значение" и упорядоченных списках. Он легко читается человеком и машиной, что делает его идеальным для передачи данных между сервером и клиентом. В Java JSON используется для:

  • Обмена данными через REST API (например, получение данных с сервера или отправка формы).
  • Конфигурационных файлов — многие фреймворки используют JSON для настройки приложений.
  • Сериализации объектов — преобразование Java-объектов в строку JSON для сохранения в файл или базу данных.
  • Десериализации — восстановление Java-объектов из JSON-строки.

Java не имеет встроенной поддержки JSON до версии 9 (когда появился модуль java.json), поэтому разработчики чаще всего используют сторонние библиотеки, такие как Gson и Jackson. Рассмотрим обе.

2. Парсинг JSON с помощью Gson

Gson — это легковесная библиотека от Google, которая позволяет легко преобразовывать JSON в Java-объекты и обратно. Она проста в использовании и не требует дополнительных аннотаций для базовых сценариев.

2.1. Установка Gson

Добавьте зависимость в ваш pom.xml (Maven):

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

Если вы используете Gradle:

implementation 'com.google.code.gson:gson:2.10.1'

2.2. Парсинг JSON в Java-объект (десериализация)

Предположим, у нас есть JSON-строка с информацией о пользователе:

{
  "name": "Иван Петров",
  "age": 30,
  "email": "ivan@example.com"
}

Создадим класс User:

public class User {
    private String name;
    private int age;
    private String email;

    // Геттеры и сеттеры (обязательны для Gson)
    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; }
}

Теперь распарсим JSON:

import com.google.gson.Gson;

public class Main {
    public static void main(String[] args) {
        String jsonString = "{\"name\":\"Иван Петров\",\"age\":30,\"email\":\"ivan@example.com\"}";
        
        Gson gson = new Gson();
        User user = gson.fromJson(jsonString, User.class);
        
        System.out.println("Имя: " + user.getName());
        System.out.println("Возраст: " + user.getAge());
    }
}

Вывод:

Имя: Иван Петров
Возраст: 30

2.3. Сериализация Java-объекта в JSON

Обратный процесс — преобразование объекта в JSON:

User user = new User();
user.setName("Мария Смирнова");
user.setAge(25);
user.setEmail("maria@example.com");

Gson gson = new Gson();
String json = gson.toJson(user);
System.out.println(json);

Результат:

{"name":"Мария Смирнова","age":25,"email":"maria@example.com"}

3. Работа с JSON с помощью Jackson

Jackson — это более мощная и производительная библиотека, которая часто используется в крупных проектах (например, в Spring Boot). Она поддерживает аннотации, потоковую обработку и работу с коллекциями.

3.1. Установка Jackson

Добавьте зависимость в pom.xml:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.16.0</version>
</dependency>

Для Gradle:

implementation 'com.fasterxml.jackson.core:jackson-databind:2.16.0'

3.2. Десериализация JSON с помощью ObjectMapper

Используем тот же класс User (аннотации не обязательны, если имена полей совпадают с ключами JSON):

import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
    public static void main(String[] args) throws Exception {
        String jsonString = "{\"name\":\"Ольга Козлова\",\"age\":28,\"email\":\"olga@example.com\"}";
        
        ObjectMapper mapper = new ObjectMapper();
        User user = mapper.readValue(jsonString, User.class);
        
        System.out.println("Email: " + user.getEmail());
    }
}

3.3. Сериализация объекта в JSON

User user = new User();
user.setName("Дмитрий Иванов");
user.setAge(35);
user.setEmail("dmitry@example.com");

ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
System.out.println(json);

Jackson также позволяет настраивать форматирование, например, красивое отображение:

String prettyJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user);
System.out.println(prettyJson);

Результат:

{
  "name" : "Дмитрий Иванов",
  "age" : 35,
  "email" : "dmitry@example.com"
}

4. Сложные сценарии: вложенные объекты, списки и аннотации

На практике JSON часто содержит влож

Блоги

Рекомендаций по книгам