Ответ
Работа с JSON в Java обычно осуществляется с помощью сторонних библиотек. Наиболее популярные — Jackson и Gson.
Библиотека Jackson (de facto стандарт)
Основной класс — ObjectMapper.
1. Сериализация объекта в JSON (Java Object → JSON String):
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
User user = new User("John", 30, "john@example.com");
// Сериализация в строку
String jsonString = mapper.writeValueAsString(user);
System.out.println(jsonString);
// Вывод: {"name":"John","age":30,"emailAddress":"john@example.com"}
// Сериализация с красивым выводом
String prettyJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user);
System.out.println(prettyJson);
}
}
// Модельный класс с аннотациями Jackson
class User {
private String name;
private int age;
@JsonProperty("emailAddress") // Кастомное имя поля в JSON
private String email;
// Конструктор, геттеры, сеттеры...
}
2. Десериализация JSON в объект (JSON String → Java Object):
String jsonInput = "{"name":"Alice","age":25,"emailAddress":"alice@example.com"}";
User userObject = mapper.readValue(jsonInput, User.class);
System.out.println(userObject.getName()); // Alice
3. Работа со сложными структурами (коллекции, вложенные объекты):
// Список объектов
List<User> users = mapper.readValue(jsonArrayString, new TypeReference<List<User>>() {});
// Map
Map<String, Integer> map = mapper.readValue("{"A":1,"B":2}",
new TypeReference<Map<String, Integer>>() {});
Ключевые возможности и аннотации Jackson:
@JsonProperty— задает имя поля в JSON.@JsonIgnore— исключает поле из сериализации/десериализации.@JsonFormat— управляет форматированием дат.@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy") private LocalDate birthDate;@JsonInclude— управляет включением полей (например, только не-null значения).@JsonInclude(JsonInclude.Include.NON_NULL)
Альтернатива: Gson (от Google)
Более легковесная и простая в настройке библиотека.
import com.google.gson.Gson;
Gson gson = new Gson();
String json = gson.toJson(myObject); // Сериализация
MyClass obj = gson.fromJson(json, MyClass.class); // Десериализация
Выбор библиотеки:
- Jackson: Более мощный, гибкий, считается стандартом в Spring и многих других фреймворках. Поддерживает streaming API, аннотации, разные форматы данных (XML, YAML).
- Gson: Проще в использовании, меньше зависимостей, хорошо подходит для простых задач и Android-разработки.