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

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

Ниже приведены основные функции класса JsonWriter.

Таблица 1. Функции класса JsonWriter
Функция Описание
JsonWriter beginArray() Служит для информировании, что сейчас будет добавляться список значений.
JsonWriter endArray() Служит для информировании, что добавление списка закончено.
JsonWriter beginObject() Служит для информировании, что сейчас будет добавляться объект.
JsonWriter endObject() Служит для информировании, что добавление объекта закончено.
void close() Закрывает “врайтер”.
JsonWriter name(String name) Записывает имя ключа объекта.
JsonWriter nullValue() Записывает пустое значение.
JsonWriter value(boolean value) Записывает значение. Тип значения указан в имени функции.
JsonWriter value(long value)
JsonWriter value(double value)
JsonWriter value(Number value)
JsonWriter value(String value)

Обратим внимание, что почти все функции таблицы 1 возвращают текущий JsonWriter. Таким образом, можно производить вызов функций, выстраивая их в цепочку вызовов.

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

// Класс 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;
    }

    public int getId() {
        return id;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

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

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

public class Main {
    public static final int MOCK_SIZE = 3;

    public static void main(String[] args) throws IOException {
        List<User> users = getMockUsers(MOCK_SIZE);

        File file = new File("src/main/resources/users.json");
        // Создаем врайтер
        JsonWriter writer = new JsonWriter(new FileWriter(file));
        // говорим, что оступ будет два пробела относительно родителя
        writer.setIndent("  ");
        // пишем в файл данные
        writeUsers(writer, users);
        // обязательно закрываем врайтер
        writer.close();
    }

    /**
     * Функция-генератор списка пользователей
     *
     * @param count Количество пользователей
     * @return Список пользователей
     */
    private static List<User> getMockUsers(int count) {
        List<User> users = new ArrayList<User>();
        for (int i = 0; i < count; i++) {
            int id = i + 1;
            String firstName = "first_name_" + id;
            String lastName = "last_name_" + id;
            User user = new User(id, firstName, lastName);
            users.add(user);
        }
        return users;
    }

    /**
     * Пишет список в json файл
     *
     * @param writer врайтер
     * @param users  Список пользователей
     */
    private static void writeUsers(JsonWriter writer, List<User> users) 
                                                             throws IOException {
        writer.beginArray();
        for (User user : users) {
            writeUser(writer, user);
        }
        writer.endArray();
    }

    /**
     * Пишет информацию об одном пользователе в json файл
     *
     * @param writer врайтер
     * @param user   Пользователь
     */
    private static void writeUser(JsonWriter writer, User user) throws IOException {
        writer.beginObject();
        writer.name("id").value(user.getId());
        writer.name("first_name").value(user.getFirstName());
        writer.name("last_name").value(user.getLastName());
        writer.endObject();
    }
}

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


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

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

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