На этом шаге мы рассмотрим класс JsonReader
Библиотека Gson предлагает еще один способ сериализации и десериализации объектов. Для этого есть классы JsonReader (для десериализации) и JsonWriter (для сериализации). JsonWriter будет рассмотрен в следующем шаге, а в этом шаге в таблице 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