Шаг 144.
Язык программирования Java.
Библиотека Gson. Класс JsonReader

На этом шаге мы рассмотрим класс JsonReader

Библиотека Gson предлагает еще один способ сериализации и десериализации объектов. Для этого есть классы JsonReader (для десериализации) и JsonWriter (для сериализации). JsonWriter будет рассмотрен в следующем шаге, а в этом шаге в таблице 1 мы приведем основные функции класса JsonReader.

Таблица 1. Функции класса JsonReader
Функция Описание
boolean hasNext() Проверяет на наличие необработанного элемента.
void skipValue() Пропускает элемент.
void beginArray() Начинает обход списка.
void endArray() Заканчивает обход списка.
void beginObject() Начинает обход объекта.
void endObject() Заканчивает обход объекта.
void close() Закрывает “ридер”.
String nextName() Считывает значение ключа объекта.
boolean nextBoolean() Возвращает очередное значение, которое является примитивным элементом. Тип элемента указан в названии функции. Обратим внимание на функци. nextNull. Она просто пропускает пустое значение.
double nextDouble()
int nextInt()
long nextLong()
String nextString()
void nextNull()

Приведем ниже пример использования класса JsonReader.

// Файл users.json
[
  {
    "id": 1,
    "first_name": "first_name_1",
    "last_name": "last_name_1"
  },
  {
    "id": 2,
    "first_name": "first_name_2",
    "last_name": "last_name_2"
  },
  {
    "id": 3,
    "first_name": "first_name_3",
    "last_name": "last_name_3"
  }
]
// Класс User
public class User {
    private int id;
    private String firstName;
    private String lastName;

    public User(int id, String firstName, String lastName) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    @Override
    public String toString() {
        return "id = " + id +
                "\n\tfirstName = " + firstName +
                "\n\tlastName = " + lastName;
    }
}
// Класс Main
import com.google.gson.stream.JsonReader;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("src/main/resources/users.json");

        // Создаем ридер
        JsonReader reader = new JsonReader(new FileReader(file));
        // Читаем json файл
        List<User> users = getUsers(reader);
        // Выводим результат
        users.forEach(System.out::println);
        // обязательно закрываем ридер
        reader.close();
    }

    /**
     * Возвращает список всех пользователей
     *
     * @param reader Ридер
     * @return список всех пользователей
     */
    private static List<User> getUsers(JsonReader reader) throws IOException {
        List<User> users = new ArrayList<User>();

        // начало обработки списка
        reader.beginArray();
        while (reader.hasNext()) {
            // читаем информацию о пользователе
            User user = readUser(reader);
            users.add(user);
        }
        // конец обработки списка
        reader.endArray();

        return users;
    }

    /**
     * Возвращает очередного пользователя
     *
     * @param reader Ридер
     * @return Информацию о пользователе
     */
    private static User readUser(JsonReader reader) throws IOException {
        int id = 0;
        String firstName = "";
        String lastName = "";

        // начало обработки объекта
        reader.beginObject();
        while (reader.hasNext()) {
            String name = reader.nextName();
            if (name.equals("id")) {
                id = reader.nextInt();
            } else if (name.equals("first_name")) {
                firstName = reader.nextString();
            } else if (name.equals("last_name")) {
                lastName = reader.nextString();
            }
        }
        // конец обработки объекта
        reader.endObject();

        return new User(id, firstName, lastName);
    }
}

Проект можно взять здесь


Рис. 1. Результат программы

На следующем шаге мы рассмотрим класс JsonWriter

Предыдущий шаг Содержание Следующий шаг