Работа с JSON в Java: парсинг и сериализация для начинающих
JSON (JavaScript Object Notation) — это легкий формат обмена данными, который широко используется в веб-разработке, мобильных приложениях и микросервисах. Для Java-разработчика умение читать (парсить) и создавать (сериализовать) JSON — обязательный навык. В этой статье мы разберем основы работы с JSON на Java, используя две самые популярные библиотеки: Jackson и Gson. Материал рассчитан на начинающих, поэтому все примеры будут максимально простыми и понятными.
Что такое парсинг и сериализация JSON?
Прежде чем перейти к коду, давайте определимся с понятиями:
- Сериализация — это процесс преобразования Java-объекта в строку JSON. Например, вы создали объект
Userи хотите отправить его на сервер в виде JSON. - Парсинг (десериализация) — обратный процесс: преобразование строки JSON обратно в Java-объект. Например, вы получили ответ от API и хотите работать с данными как с обычным объектом.
Подготовка проекта: добавление зависимостей
Для работы с JSON нам понадобятся внешние библиотеки. Рассмотрим два самых популярных варианта.
Вариант 1: Jackson (рекомендуется для новичков)
Jackson — это мощная и производительная библиотека. Если вы используете Maven, добавьте в pom.xml:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
Вариант 2: Gson (от Google)
Gson — легкая и интуитивно понятная библиотека. Зависимость для Maven:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
Обе библиотеки можно скачать вручную с Maven Central, если вы не используете систему сборки.
Пример данных: класс User
Для всех примеров мы будем использовать простой класс User:
public class User {
private String name;
private int age;
private String email;
// Обязательно нужен пустой конструктор для Jackson и Gson
public User() {}
public User(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; }
}
Парсинг JSON (String → Java Object)
Разберем, как прочитать JSON-строку и превратить ее в объект User.
С помощью Jackson
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonParsingExample {
public static void main(String[] args) throws Exception {
String jsonString = "{ \"name\": \"Иван\", \"age\": 30, \"email\": \"ivan@example.com\" }";
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(jsonString, User.class);
System.out.println("Имя: " + user.getName());
System.out.println("Возраст: " + user.getAge());
}
}
С помощью Gson
import com.google.gson.Gson;
public class GsonParsingExample {
public static void main(String[] args) {
String jsonString = "{ \"name\": \"Мария\", \"age\": 25, \"email\": \"maria@example.com\" }";
Gson gson = new Gson();
User user = gson.fromJson(jsonString, User.class);
System.out.println("Имя: " + user.getName());
System.out.println("Email: " + user.getEmail());
}
}
Сериализация (Java Object → String JSON)
Теперь сделаем обратное — создадим объект User и преобразуем его в JSON.
С помощью Jackson
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonSerializationExample {
public static void main(String[] args) throws Exception {
User user = new User("Алексей", 28, "alex@example.com");
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
System.out.println(json);
// Вывод: {"name":"Алексей","age":28,"email":"alex@example.com"}
}
}
С помощью Gson
import com.google.gson.Gson;
public class GsonSerializationExample {
public static void main(String[] args) {
User user = new User("Елена", 22, "elena@example.com");
Gson gson = new Gson();
String json = gson.toJson(user);
System.out.println(json);
// Вывод: {"name":"Елена","age":22,"email":"elena@example.com"}
}
}
Работа с массивами и списками JSON
Часто JSON содержит не один объект, а массив. Разберем, как работать с коллекциями.
Парсинг массива JSON с Jackson
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
public class JacksonListExample {
public static void main(String[] args) throws Exception {
String jsonArray = "[{\"name\":\"Иван\",\"age\":30},{\"name\":\"Петр\",\"age\":25}]";
ObjectMapper mapper = new ObjectMapper();
List<User> users = mapper.readValue(jsonArray, new TypeReference<List<User>>() {});
for (User u : users) {
System.out.println(u.getName() + " - " + u.getAge());
}
}
}
Сериализация списка в JSON с Gson
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
public class GsonListExample {
public static void main(String[] args) {
List<User> users = new ArrayList<>();
users.add(new User("Анна", 27, "anna@test.com"));
users.add(new User("Сергей", 35, "sergey@test.com"));
Gson gson = new Gson();
String json = gson.toJson(users);
System.out.println(json);
// Вывод: [{"name":"Анна","age":27,"email":"anna@test.com"},{"name":"С