Ответ
Работа с 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-разработки.
Ответ 18+ 🔞
А, JSON в Java, ну это классика, блядь! Все эти ваши REST API, конфиги, обмен данными — везде этот самый JSON торчит, как шило в жопе. И работать с ним голыми руками — это ж себе мозги выебать, ну нахуй. К счастью, есть библиотеки, которые всю эту муть на себя берут.
Вот смотри, есть два главных пацана на районе: Jackson и Gson. Jackson — это как солидный, блядь, авторитет, де-факто стандарт, особенно в Spring'овских бандах. А Gson — это такой шустрый парень от Google, попроще, но тоже дело знает.
Jackson — ёбаный король ситуации
Основной его инструмент — ObjectMapper. Эта твоя волшебная палочка, которая превращает Java-объекты в JSON-строку и обратно. Пиздец как удобно.
1. Объект → JSON (Сериализация) Вот смотри, как просто, ёпта:
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("Васян", 30, "vasya@banya.ru");
// Превращаем объект в строку — раз, и готово
String jsonString = mapper.writeValueAsString(user);
System.out.println(jsonString);
// Напечатает: {"name":"Васян","age":30,"emailAddress":"vasya@banya.ru"}
// А можно ещё и красиво, с отступами, для читабельности
String prettyJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user);
System.out.println(prettyJson); // Красота, блядь!
}
}
// А это наш класс-моделька
class User {
private String name;
private int age;
@JsonProperty("emailAddress") // Смотри, какая хитрая жопа! В JSON поле будет называться не 'email', а 'emailAddress'
private String email;
// Ну и дальше конструктор, геттеры-сеттеры... сам допишешь, не маленький
}
2. JSON → Объект (Десериализация) А вот обратный фокус — из строки живой объект достаём:
String jsonInput = "{"name":"Алиса","age":25,"emailAddress":"alice@wonder.land"}";
User userObject = mapper.readValue(jsonInput, User.class);
System.out.println(userObject.getName()); // Выведет: Алиса
Вот и вся магия, блядь. Не нужно самому парсить, строки резать — ObjectMapper всё за тебя сделает, только класс правильно опиши.
3. А если структуры посложнее? А хуй там! Списки, мапы, вложенные объекты — всё переварит.
// Допустим, прилетел JSON с массивом пользователей
List<User> users = mapper.readValue(jsonArrayString, new TypeReference<List<User>>() {});
// Или вот, простой Map пришёл
Map<String, Integer> map = mapper.readValue("{"Яблоки":100,"Груши":200}",
new TypeReference<Map<String, Integer>>() {});
Фишки и аннотации Jackson
Чтобы совсем уж тонко управлять процессом, есть куча аннотаций. Вот основные, чтоб не облажаться:
@JsonProperty("имя_в_json")— как в примере выше. Говоришь библиотеке: «Слышь, полеemailу меня, но в JSON'е пусть будетemailAddress, я так хочу!».@JsonIgnore— эта штука просто вычёркивает поле нахуй. Ни в JSON его не отправит, ни из JSON не прочитает. Секретные пароли, всякая служебная хуйня — идеально.@JsonFormat— для дат, блядь, спасение. А то они сами по себе выглядят, как попало.@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy") private LocalDate birthDate; // Теперь будет "31-12-1999", а не какая-то дичь@JsonInclude(JsonInclude.Include.NON_NULL)— вешаешь на класс и говоришь: «Не пиши в JSON поля, которые равныnull». Чистота, порядок, ебать!
Gson — лёгкая артиллерия
А это библиотечка от Гугла. Попроще, побыстрее в освоении. Если проект не огромный и не требует всех этих Jackson'овских извращений — Gson может быть в самый раз.
import com.google.gson.Gson;
Gson gson = new Gson(); // Создал — и всё, готов к работе
String json = gson.toJson(myObject); // Объект в строку
MyClass obj = gson.fromJson(json, MyClass.class); // Строку обратно в объект
Вот и весь разговор. Никаких тебе сложных конфигураций по умолчанию.
Так что же выбрать, ёпта?
- Jackson: Если ты в большом, серьёзном проекте (особенно на Spring), нужна хитровыебанная настройка, работа с XML/YAML или максимальная производительность. Это твой тяжёлый, блядь, инструмент.
- Gson: Для быстрых скриптов, простых задач, Android-разработки или когда овердохуища зависимостей от Jackson'а не хочется. Просто взял и сделал.
В общем, суть в чём: не изобретай велосипед, не парсь JSON вручную, это путь в никуда. Бери библиотеку, настраивай под себя — и живи спокойно, блядь.