Шаг 142.
Язык программирования Java.
Библиотека Gson. Функции toJson и fromJson (продолжение)

На этом шаге мы рассмотрим применение функций toJson и fromJson для более сложных типов объектов

На прошлом шаге мы рассмотрели как с помощью библиотеки Gson производить сериализацию и десериализацию простейших типов. На этом шаге мы рассмотрим, как это сделать для произвольных объектов.

Рассмотрим первый пример. Пусть у нас есть массив чисел. Сериализация и десериализация таких объектов ничем не отличается от тех же операций для простейших типов:

Gson gson = new Gson();

System.out.println(gson.toJson(new int[] {1, 2, 3, 4, 5}));

int[] array = gson.fromJson("[6,7,8,9,0]", int[].class);
for (int i = 0; i < array.length; i++) {
    System.out.print(array[i] + " ");
}
System.out.println();

// На экране
// [1,2,3,4,5]
// 6 7 8 9 0

Рассмотрим второй пример. Пусть у нас уже есть собственный класс TestGson.

class TestGson {
    @SerializedName("test_number")
    private int number;
    @SerializedName("test_string")
    private String string;
    private transient boolean boolValue;

    public TestGson(int number, String string, boolean boolValue) {
        this.number = number;
        this.string = string;
        this.boolValue = boolValue;
    }

    @Override
    public String toString() {
        return "number = " + number +
                ", string = " + string +
                ", boolValue = " + boolValue;
    }
}

В таком случае сериализация и десериализация также не будет отличаться от тех же операций для простейших типов:

Gson gson = new Gson();

TestGson testGson = new TestGson(1, "ddd", true);

String json = gson.toJson(testGson);
System.out.println(json);
System.out.println(gson.fromJson(json, TestGson.class));

// на экране
// {"test_number":1,"test_string":"ddd"}
// number = 1, string = ddd, boolValue = false

Обратим внимание на ключевое слово transient. По умолчанию поля, помеченные таким словом, не будут сериализовываться. Таким образом, после десериализации такие поля будут проинициализированы значениями по умолчанию.

Имя ключа в json объекте по умолчанию будет совпадать с именем поля. Если вы хотите переопределить имя ключа, то нужно воспользоваться аннотацией @SerializedName, передав ей новое имя ключа.

Рассмотрим третий пример. Пусть у нас есть список объектов. Сериализация списков ничем не отличается от сериализации простейших типов.

Gson gson = new Gson();

List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 5; i++) {
    list.add(i + 1);
}

System.out.println(gson.toJson(list));

А вот для десериализации списков нужно проделать следующее:

Type type = new TypeToken<List<Integer>>() {}.getType();
list = gson.fromJson("[6,7,8,9,0]", type);

Мы создали объект типа Type, как это показано выше. После чего мы передали созданный объект вторым аргументом в функцию fromJson в качестве типа результата.

На следующем шаге мы закончим рассматривать функции toJson и fromJson

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