Парсинг JSON в Java: от новичка до профи за 20 минут

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

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

Начать курс

Парсинг JSON в Java: с нуля до работающего кода

Вы когда-нибудь смотрели на JSON-ответ от API и чувствовали лёгкую панику? «Как мне вытащить отсюда name? А что делать с этим вложенным объектом?» — знакомые вопросы, правда? Не переживайте, вы не одиноки. Тема «How to parse JSON in Java» — один из самых популярных запросов на Stack Overflow, и сегодня мы раз и навсегда закроем этот вопрос.

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

Что вы получите после прочтения? Вы сможете спарсить любой JSON — от простой строки до сложной вложенной структуры с массивами. Поехали!

Подготовка: что нам понадобится

Для примеров мы будем использовать простой Maven-проект. Если вы не используете Maven — не беда, просто скачайте JAR-файлы библиотек вручную. Вот минимальные зависимости для pom.xml:

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

<!-- Jackson -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

<!-- org.json (простая) -->
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20231013</version>
</dependency>

Теперь представим, что мы получили от сервера такой JSON (информация о пользователе):

{
  "id": 42,
  "name": "Алиса",
  "email": "alice@example.com",
  "isActive": true,
  "address": {
    "city": "Москва",
    "street": "Тверская"
  },
  "hobbies": ["чтение", "программирование", "велосипед"]
}

Наша задача — превратить эту строку в Java-объекты и вытащить нужные поля. Поехали по порядку.

Метод 1: Парсинг JSON в Java с помощью Gson (просто и элегантно)

Gson от Google — это, пожалуй, самый простой способ парсить JSON в Java. Его главное преимущество — минимализм. Вам не нужно писать много кода.

Шаг 1. Создаём Java-класс (POJO), который соответствует структуре JSON.

public class User {
    private int id;
    private String name;
    private String email;
    private boolean isActive;
    private Address address;
    private List<String> hobbies;

    // Геттеры и сеттеры (обязательны для Gson!)
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    // ... остальные геттеры/сеттеры аналогично
}

public class Address {
    private String city;
    private String street;
    // геттеры/сеттеры
}

Шаг 2. Парсим JSON одной строкой.

import com.google.gson.Gson;

public class GsonExample {
    public static void main(String[] args) {
        String json = "{\"id\":42,\"name\":\"Алиса\",\"email\":\"alice@example.com\",\"isActive\":true,\"address\":{\"city\":\"Москва\",\"street\":\"Тверская\"},\"hobbies\":[\"чтение\",\"программирование\",\"велосипед\"]}";

        Gson gson = new Gson();
        User user = gson.fromJson(json, User.class);

        System.out.println("Имя: " + user.getName());
        System.out.println("Город: " + user.getAddress().getCity());
        System.out.println("Первое хобби: " + user.getHobbies().get(0));
    }
}

Вывод:

Имя: Алиса
Город: Москва
Первое хобби: чтение

Почему это круто? Gson автоматически маппит поля JSON на поля Java-класса. Если имена полей в JSON отличаются от Java (например, is_active вместо isActive), используйте аннотацию @SerializedName("is_active").

Когда использовать Gson? Когда вам нужен быстрый результат без настройки. Идеально для простых проектов и прототипов.

Метод 2: Парсинг JSON в Java с помощью Jackson (гибкость и скорость)

Jackson — это «тяжёлая артиллерия» в мире Java JSON. Он быстрее Gson и предлагает гораздо больше возможностей: кастомные десериализаторы, работа с деревьями (Tree Model) и потоковый парсинг.

Шаг 1. Тот же POJO-класс User (только геттеры/сеттеры обязательны).

Шаг 2. Используем ObjectMapper.

import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":42,\"name\":\"Алиса\",\"email\":\"alice@example.com\",\"isActive\":true,\"address\":{\"city\":\"Москва\",\"street\":\"Тверская\"},\"hobbies\":[\"чтение\",\"программирование\",\"велосипед\"]}";

        ObjectMapper mapper = new ObjectMapper();
        User user = mapper.readValue(json, User.class);

        System.out.println("Email: " + user.getEmail());
        System.out.println("Активен: " + user.isActive());
    }
}

Важный момент: Если у вас в JSON есть неизвестные поля, Jackson выбросит исключение. Чтобы этого избежать, настройте ObjectMapper:

mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

Парсинг без POJO (Tree Model). Иногда лень создавать класс. Jackson позволяет работать с JSON как с деревом узлов:

JsonNode root = mapper.readTree(json);
String name = root.get("name").asText();
String city = root.get("address").get("city").asText();
System.out.println(name + " из города " + city);

Когда использовать Jackson? В больших проектах, где важна производительность, или когда нужно гибко обрабатывать динамические JSON-структуры.

Метод 3: Парсинг JSON в Java с помощью org.json (ручной контроль)

Библиотека org.json — это «дедушка» среди JSON-парсеров. Она не маппит данные на класс

Блоги

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