JSON обработка в Java: обзор библиотек и практические примеры
JSON (JavaScript Object Notation) — это легковесный формат обмена данными, широко используемый в веб-разработке, мобильных приложениях и микросервисах. В Java существует несколько популярных библиотек для работы с JSON. В этой статье мы рассмотрим три основные: Jackson, Gson и org.json, а также приведём практические примеры парсинга, сериализации и генерации JSON.
1. Jackson — самая популярная библиотека
Jackson (com.fasterxml.jackson.core) — это мощная библиотека с высокой производительностью. Она поддерживает аннотации, потоки и полную настройку маппинга. Для подключения добавьте в Maven:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
Пример: сериализация объекта в JSON
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.*;
public class JacksonExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
// Создаём объект
Map<String, Object> user = new HashMap<>();
user.put("name", "Иван");
user.put("age", 30);
user.put("skills", Arrays.asList("Java", "Spring", "SQL"));
// Сериализация в строку JSON
String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user);
System.out.println(json);
}
}
Вывод:
{
"name" : "Иван",
"age" : 30,
"skills" : [ "Java", "Spring", "SQL" ]
}
Пример: парсинг JSON в Java-объект
import com.fasterxml.jackson.databind.ObjectMapper;
public class ParseJson {
public static void main(String[] args) throws Exception {
String json = "{\"name\":\"Анна\",\"age\":25}";
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(json, User.class);
System.out.println("Имя: " + user.getName());
System.out.println("Возраст: " + user.getAge());
}
}
class User {
private String name;
private int age;
// геттеры и сеттеры обязательны
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; }
}
2. Gson — лёгкая и простая библиотека от Google
Gson (com.google.code.gson) отличается простотой API и минимальной конфигурацией. Подходит для небольших проектов. Maven:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
Пример: генерация JSON из Map
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.*;
public class GsonExample {
public static void main(String[] args) {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
Map<String, Object> data = new LinkedHashMap<>();
data.put("title", "Пример");
data.put("completed", false);
data.put("tags", List.of("java", "json"));
String json = gson.toJson(data);
System.out.println(json);
}
}
Пример: парсинг JSON в список объектов
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.*;
public class GsonParseList {
public static void main(String[] args) {
String json = "[{\"id\":1,\"name\":\"Товар А\"},{\"id\":2,\"name\":\"Товар Б\"}]";
Gson gson = new Gson();
Type listType = new TypeToken<List<Product>>(){}.getType();
List<Product> products = gson.fromJson(json, listType);
products.forEach(p -> System.out.println(p.id + " - " + p.name));
}
}
class Product {
int id;
String name;
}
3. org.json — минималистичная библиотека без зависимостей
org.json (org.json:json) — лёгкая библиотека, встроенная в некоторые фреймворки. Идеальна для быстрых прототипов. Maven:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20230227</version>
</dependency>
Пример: создание JSON вручную
import org.json.JSONObject;
import org.json.JSONArray;
public class OrgJsonExample {
public static void main(String[] args) {
JSONObject obj = new JSONObject();
obj.put("name", "Тест");
obj.put("value