Gson — Обзор
Google Gson — это простая библиотека на основе Java для сериализации объектов Java в JSON и наоборот. Это библиотека с открытым исходным кодом, разработанная Google.
Следующие пункты подчеркивают, почему вы должны использовать эту библиотеку —
-
Стандартизированный — Gson — это стандартизированная библиотека, управляемая Google.
-
Эффективный — это надежное, быстрое и эффективное расширение стандартной библиотеки Java.
-
Оптимизировано — библиотека высоко оптимизирована.
-
Поддержка дженериков — обеспечивает обширную поддержку дженериков.
-
Поддерживает сложные внутренние классы — поддерживает сложные объекты с глубокой иерархией наследования.
Стандартизированный — Gson — это стандартизированная библиотека, управляемая Google.
Эффективный — это надежное, быстрое и эффективное расширение стандартной библиотеки Java.
Оптимизировано — библиотека высоко оптимизирована.
Поддержка дженериков — обеспечивает обширную поддержку дженериков.
Поддерживает сложные внутренние классы — поддерживает сложные объекты с глубокой иерархией наследования.
Особенности Gson
Вот список некоторых наиболее ярких особенностей Gson —
-
Простота в использовании — Gson API обеспечивает фасад высокого уровня для упрощения часто используемых сценариев использования.
-
Нет необходимости создавать сопоставление — API Gson обеспечивает сопоставление по умолчанию для большинства сериализуемых объектов.
-
Производительность — Gson довольно быстрый и занимает мало памяти. Подходит для больших графов объектов или систем.
-
Чистый JSON — Gson создает чистый и компактный результат JSON, который легко читается.
-
Нет зависимости — библиотека Gson не требует какой-либо другой библиотеки, кроме JDK.
-
Open Source — библиотека Gson с открытым исходным кодом; это свободно доступно.
Простота в использовании — Gson API обеспечивает фасад высокого уровня для упрощения часто используемых сценариев использования.
Нет необходимости создавать сопоставление — API Gson обеспечивает сопоставление по умолчанию для большинства сериализуемых объектов.
Производительность — Gson довольно быстрый и занимает мало памяти. Подходит для больших графов объектов или систем.
Чистый JSON — Gson создает чистый и компактный результат JSON, который легко читается.
Нет зависимости — библиотека Gson не требует какой-либо другой библиотеки, кроме JDK.
Open Source — библиотека Gson с открытым исходным кодом; это свободно доступно.
Три способа обработки JSON
Gson предлагает три альтернативных способа обработки JSON:
Потоковый API
Он читает и записывает содержимое JSON как отдельные события. JsonReader и JsonWriter считывают / записывают данные как токен, называемый JsonToken .
Это самый мощный подход из трех подходов к обработке JSON. Он имеет минимальные накладные расходы и довольно быстр в операциях чтения / записи. Это аналог парсера Stax для XML.
Модель дерева
Он подготавливает представление дерева JSON в памяти. Он строит дерево узлов JsonObject. Это гибкий подход, аналогичный анализатору DOM для XML.
Привязка данных
Он преобразует JSON в POJO (простой старый объект Java) и обратно, используя метод доступа к свойствам. Gson читает / пишет JSON, используя адаптеры типов данных. Это аналог анализатора JAXB для XML.
Gson — Настройка среды
Настройка локальной среды
Если вы все еще хотите настроить локальную среду для языка программирования Java, то в этом разделе вы узнаете, как загрузить и настроить Java на вашем компьютере. Пожалуйста, следуйте инструкциям ниже, чтобы настроить среду.
Java SE находится в свободном доступе по ссылке Скачать Java . Таким образом, вы загружаете версию, основанную на вашей операционной системе.
Следуйте инструкциям для загрузки Java и запуска .exe для установки Java на вашем компьютере. После того, как вы установили Java на свой компьютер, вам нужно будет установить переменные среды, чтобы они указывали на их правильные каталоги установки.
Настройка пути в Windows 2000 / XP
Предполагая, что вы установили Java в каталог c: \ Program Files \ java \ jdk —
-
Щелкните правой кнопкой мыши «Мой компьютер» и выберите «Свойства».
-
Нажмите кнопку «Переменные среды» на вкладке «Дополнительно».
-
Затем измените переменную Path, чтобы она также содержала путь к исполняемому файлу Java. Например, если в настоящий момент путь задан как «C: \ WINDOWS \ SYSTEM32», измените ваш путь на «C: \ WINDOWS \ SYSTEM32; c: \ Program Files \ java \ jdk \ bin».
Щелкните правой кнопкой мыши «Мой компьютер» и выберите «Свойства».
Нажмите кнопку «Переменные среды» на вкладке «Дополнительно».
Затем измените переменную Path, чтобы она также содержала путь к исполняемому файлу Java. Например, если в настоящий момент путь задан как «C: \ WINDOWS \ SYSTEM32», измените ваш путь на «C: \ WINDOWS \ SYSTEM32; c: \ Program Files \ java \ jdk \ bin».
Настройка пути в Windows 95/98 / ME
Предполагая, что вы установили Java в каталог c: \ Program Files \ java \ jdk —
-
Отредактируйте файл «C: \ autoexec.bat» и добавьте в конце следующую строку: «SET PATH =% PATH%; C: \ Program Files \ java \ jdk \ bin»
Отредактируйте файл «C: \ autoexec.bat» и добавьте в конце следующую строку: «SET PATH =% PATH%; C: \ Program Files \ java \ jdk \ bin»
Настройка пути для Linux, UNIX, Solaris, FreeBSD
Переменная среды PATH должна быть указана в том месте, где были установлены двоичные файлы Java. Обратитесь к документации по вашей оболочке, если у вас возникли проблемы с этим.
Например, если вы используете bash в качестве оболочки, вы добавили бы следующую строку в конец вашего .bashrc: export PATH = / path / to / java: $ PATH ‘
Популярные редакторы Java
Для написания ваших программ на Java вам понадобится текстовый редактор. На рынке доступно довольно много сложных IDE. Но сейчас вы можете рассмотреть один из следующих —
-
Блокнот — В Windows вы можете использовать любой простой текстовый редактор, например Блокнот (рекомендуется для этого урока) или TextPad.
-
Netbeans — это Java IDE с открытым исходным кодом, который можно загрузить по адресу https://netbeans.org/index.html .
-
Eclipse — это также Java IDE, разработанная сообществом открытого исходного кода Eclipse, которую можно загрузить по адресу https://www.eclipse.org/ .
Блокнот — В Windows вы можете использовать любой простой текстовый редактор, например Блокнот (рекомендуется для этого урока) или TextPad.
Netbeans — это Java IDE с открытым исходным кодом, который можно загрузить по адресу https://netbeans.org/index.html .
Eclipse — это также Java IDE, разработанная сообществом открытого исходного кода Eclipse, которую можно загрузить по адресу https://www.eclipse.org/ .
Скачать Gson Archive
Загрузите последнюю версию файла Gson jar с gson-2.3.1.jar . На момент написания этого руководства мы загрузили gson-2.3.1.jar и скопировали его в папку C: \> gson.
Операционные системы | Название архива |
---|---|
Windows | gson-2.3.1.jar |
Linux | gson-2.3.1.jar |
макинтош | gson-2.3.1.jar |
Установить среду Gson
Установите переменную окружения GSON_HOME, чтобы она указывала на местоположение базовой директории, где находится Gson jar на вашем компьютере.
Операционные системы | Выход |
---|---|
Windows | Установите переменную окружения GSON_HOME в C: \ gson |
Linux | экспортировать GSON_HOME = / usr / local / gson |
макинтош | экспорт GSON_HOME = / библиотека / gson |
Установить переменную CLASSPATH
Задайте переменную среды CLASSPATH, чтобы она указывала на расположение Gson jar.
Операционные системы | Выход |
---|---|
Windows | Установите для переменной среды CLASSPATH значение% CLASSPATH%;% GSON_HOME% \ gson-2.3.1.jar;.; |
Linux | export CLASSPATH = $ CLASSPATH: $ GSON_HOME / gson-2.3.1.jar :. |
макинтош | export CLASSPATH = $ CLASSPATH: $ GSON_HOME / gson-2.3.1.jar :. |
Gson — Первое применение
Прежде чем углубляться в детали библиотеки Google Gson, давайте посмотрим на приложение в действии. В этом примере мы создали класс Student . Мы создадим строку JSON с данными ученика и десериализовали бы ее в объект ученика, а затем сериализовали в строку JSON.
пример
Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.
Файл — GsonTester.java
import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class GsonTester { public static void main(String[] args) { String jsonString = "{\"name\":\"Mahesh\", \"age\":21}"; GsonBuilder builder = new GsonBuilder(); builder.setPrettyPrinting(); Gson gson = builder.create(); Student student = gson.fromJson(jsonString, Student.class); System.out.println(student); jsonString = gson.toJson(student); System.out.println(jsonString); } } class Student { private String name; private int age; public Student(){} public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString() { return "Student [ name: "+name+", age: "+ age+ " ]"; } }
Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\GSON_WORKSPACE>javac GsonTester.java
Теперь запустите GsonTester, чтобы увидеть результат —
C:\GSON_WORKSPACE>java GsonTester
Проверьте вывод.
Student [ name: Mahesh, age: 21 ] { "name" : "Mahesh", "age" : 21 }
Шаги, чтобы Помнить
Ниже приведены важные шаги, которые следует рассмотреть здесь.
Шаг 1 — Создание объекта Gson с помощью GsonBuilder
Создайте объект Gson. Это повторно используемый объект.
GsonBuilder builder = new GsonBuilder(); builder.setPrettyPrinting(); Gson gson = builder.create();
Шаг 2 — Десериализация JSON в объект
Используйте метод fromJson (), чтобы получить Объект из JSON. Передать строку Json / источник строки Json и тип объекта в качестве параметра.
//Object to JSON Conversion Student student = gson.fromJson(jsonString, Student.class);
Шаг 3 — Сериализация объекта в JSON
Используйте метод toJson (), чтобы получить строковое представление объекта в формате JSON.
//Object to JSON Conversion jsonString = gson.toJson(student);
Гсон — Класс
Gson — основной актерский класс библиотеки Google Gson. Он предоставляет функции для преобразования объектов Java в соответствующие конструкции JSON и наоборот. Сначала Gson создается с использованием GsonBuilder, а затем методы toJson (Object) или fromJson (String, Class) используются для чтения / записи конструкций JSON.
Декларация класса
Ниже приводится объявление для класса com.google.gson.Gson —
public final class Gson extends Object
Конструкторы
Sr.No | Конструктор и описание |
---|---|
1 |
Gson () Создает объект Gson с конфигурацией по умолчанию. |
Gson ()
Создает объект Gson с конфигурацией по умолчанию.
Методы класса
Sr.No | Метод и описание |
---|---|
1 |
<T> T fromJson (JsonElement json, Class <T> classOfT) Этот метод десериализует чтение Json из указанного дерева разбора в объект указанного типа. |
2 |
<T> T fromJson (JsonElement json, Тип typeOfT) Этот метод десериализует чтение Json из указанного дерева разбора в объект указанного типа. |
3 |
<T> T fromJson (читатель JsonReader, тип typeOfT) Читает следующее значение JSON из читателя и преобразовывает его в объект типа typeOfT. |
4 |
<T> T fromJson (Читатель JSON, Class <T> classOfT) Этот метод десериализует чтение Json из указанного считывателя в объект указанного класса. |
5 |
<T> T fromJson (Читатель json, Тип typeOfT) Этот метод десериализует чтение Json из указанного считывателя в объект указанного типа. |
6 |
<T> T fromJson (Строка json, Класс <T> classOfT) Этот метод десериализует указанный Json в объект указанного класса. |
7 |
<T> T fromJson (Строка json, Тип typeOfT) Этот метод десериализует указанный Json в объект указанного типа. |
8 |
<T> TypeAdapter <T> getAdapter (тип <T> класса) Возвращает адаптер типа для типа. |
9 |
<T> TypeAdapter <T> getAdapter (TypeToken <T> type) Возвращает адаптер типа для типа. |
10 |
<T> TypeAdapter <T> getDelegateAdapter (TypeAdapterFactory skipPast, TypeToken <T> type) Этот метод используется для получения адаптера альтернативного типа для указанного типа. |
11 |
String toJson (JsonElement jsonElement) Преобразует дерево JsonElements в его эквивалентное представление JSON. |
12 |
void toJson (JsonElement jsonElement, добавляемый писатель) Записывает эквивалент JSON для дерева JsonElements. |
13 |
void toJson (JsonElement jsonElement, автор JsonWriter) Записывает JSON для jsonElement автору |
14 |
String toJson (Object src) Этот метод сериализует указанный объект в его эквивалентное представление Json. |
15 |
void toJson (Object src, Writable Writer) Этот метод сериализует указанный объект в его эквивалентное представление Json. |
16 |
Строка toJson (объект src, тип typeOfSrc) Этот метод сериализует указанный объект, включая объекты универсальных типов, в его эквивалентное представление Json. |
17 |
void toJson (Object src, Тип typeOfSrc, Добавляемый писатель) Этот метод сериализует указанный объект, включая объекты универсальных типов, в его эквивалентное представление Json. |
18 |
void toJson (Object src, Тип typeOfSrc, Средство записи JsonWriter) Записывает JSON-представление src типа typeOfSrc в Writer. |
19 |
JsonElement toJsonTree (Object src) Этот метод сериализует указанный объект в его эквивалентное представление в виде дерева JsonElements. |
20 |
JsonElement toJsonTree (объект src, тип typeOfSrc) Этот метод сериализует указанный объект, включая объекты универсальных типов, в его эквивалентное представление в виде дерева JsonElements. |
21 |
Строка toString () |
<T> T fromJson (JsonElement json, Class <T> classOfT)
Этот метод десериализует чтение Json из указанного дерева разбора в объект указанного типа.
<T> T fromJson (JsonElement json, Тип typeOfT)
Этот метод десериализует чтение Json из указанного дерева разбора в объект указанного типа.
<T> T fromJson (читатель JsonReader, тип typeOfT)
Читает следующее значение JSON из читателя и преобразовывает его в объект типа typeOfT.
<T> T fromJson (Читатель JSON, Class <T> classOfT)
Этот метод десериализует чтение Json из указанного считывателя в объект указанного класса.
<T> T fromJson (Читатель json, Тип typeOfT)
Этот метод десериализует чтение Json из указанного считывателя в объект указанного типа.
<T> T fromJson (Строка json, Класс <T> classOfT)
Этот метод десериализует указанный Json в объект указанного класса.
<T> T fromJson (Строка json, Тип typeOfT)
Этот метод десериализует указанный Json в объект указанного типа.
<T> TypeAdapter <T> getAdapter (тип <T> класса)
Возвращает адаптер типа для типа.
<T> TypeAdapter <T> getAdapter (TypeToken <T> type)
Возвращает адаптер типа для типа.
<T> TypeAdapter <T> getDelegateAdapter (TypeAdapterFactory skipPast, TypeToken <T> type)
Этот метод используется для получения адаптера альтернативного типа для указанного типа.
String toJson (JsonElement jsonElement)
Преобразует дерево JsonElements в его эквивалентное представление JSON.
void toJson (JsonElement jsonElement, добавляемый писатель)
Записывает эквивалент JSON для дерева JsonElements.
void toJson (JsonElement jsonElement, автор JsonWriter)
Записывает JSON для jsonElement автору
String toJson (Object src)
Этот метод сериализует указанный объект в его эквивалентное представление Json.
void toJson (Object src, Writable Writer)
Этот метод сериализует указанный объект в его эквивалентное представление Json.
Строка toJson (объект src, тип typeOfSrc)
Этот метод сериализует указанный объект, включая объекты универсальных типов, в его эквивалентное представление Json.
void toJson (Object src, Тип typeOfSrc, Добавляемый писатель)
Этот метод сериализует указанный объект, включая объекты универсальных типов, в его эквивалентное представление Json.
void toJson (Object src, Тип typeOfSrc, Средство записи JsonWriter)
Записывает JSON-представление src типа typeOfSrc в Writer.
JsonElement toJsonTree (Object src)
Этот метод сериализует указанный объект в его эквивалентное представление в виде дерева JsonElements.
JsonElement toJsonTree (объект src, тип typeOfSrc)
Этот метод сериализует указанный объект, включая объекты универсальных типов, в его эквивалентное представление в виде дерева JsonElements.
Строка toString ()
Методы унаследованы
Этот класс наследует методы из следующего класса —
- java.lang.Object
пример
Создайте следующую Java-программу, используя любой редактор по вашему выбору, и сохраните ее, скажем, в C: /> GSON_WORKSPACE
Файл — GsonTester.java
import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class GsonTester { public static void main(String[] args) { String jsonString = "{\"name\":\"Mahesh\", \"age\":21}"; GsonBuilder builder = new GsonBuilder(); builder.setPrettyPrinting(); Gson gson = builder.create(); Student student = gson.fromJson(jsonString, Student.class); System.out.println(student); jsonString = gson.toJson(student); System.out.println(jsonString); } } class Student { private String name; private int age; public Student(){} public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString() { return "Student [ name: "+name+", age: "+ age+ " ]"; } }
Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\GSON_WORKSPACE>javac GsonTester.java
Теперь запустите GsonTester, чтобы увидеть результат —
C:\GSON_WORKSPACE>java GsonTester
Проверьте вывод
Student [ name: Mahesh, age: 21 ] { "name" : "Mahesh", "age" : 21 }
Gson — Сериализация объектов
Давайте сериализуем объект Java в файл Json, а затем прочитаем этот файл Json, чтобы получить объект обратно. В этом примере мы создали класс Student . Мы создадим файл student.json, который будет иметь представление json объекта Student .
пример
Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE .
Файл — GsonTester.java
import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class GsonTester { public static void main(String args[]) { GsonTester tester = new GsonTester(); try { Student student = new Student(); student.setAge(10); student.setName("Mahesh"); tester.writeJSON(student); Student student1 = tester.readJSON(); System.out.println(student1); } catch(FileNotFoundException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } } private void writeJSON(Student student) throws IOException { GsonBuilder builder = new GsonBuilder(); Gson gson = builder.create(); FileWriter writer = new FileWriter("student.json"); writer.write(gson.toJson(student)); writer.close(); } private Student readJSON() throws FileNotFoundException { GsonBuilder builder = new GsonBuilder(); Gson gson = builder.create(); BufferedReader bufferedReader = new BufferedReader( new FileReader("student.json")); Student student = gson.fromJson(bufferedReader, Student.class); return student; } } class Student { private String name; private int age; public Student(){} public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString() { return "Student [ name: "+name+", age: "+ age+ " ]"; } }
Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\GSON_WORKSPACE>javac GsonTester.java
Теперь запустите GsonTester, чтобы увидеть результат —
C:\GSON_WORKSPACE>java GsonTester
Проверьте вывод
Student [ name: Mahesh, age: 10 ]
Gson — привязка данных
API привязки данных используется для преобразования JSON в POJO (простой старый объект Java) и обратно с использованием метода доступа к свойствам или аннотаций. Это двух типов.
-
Примитивы привязки данных — преобразует JSON в и из Java-карт, списков, строк, чисел, логических и NULL-объектов.
-
Связывание данных объектов — преобразует JSON в любой тип JAVA.
Примитивы привязки данных — преобразует JSON в и из Java-карт, списков, строк, чисел, логических и NULL-объектов.
Связывание данных объектов — преобразует JSON в любой тип JAVA.
Gson читает / пишет JSON для обоих типов привязок данных. Привязка данных аналогична анализатору JAXB для XML.
Примитивы привязки данных
Привязка данных примитивов относится к отображению JSON в типы данных JAVA Core и встроенные коллекции. Gson предоставляет различные встроенные адаптеры, которые можно использовать для сериализации / десериализации примитивных типов данных.
пример
Давайте посмотрим на примитивную привязку данных в действии. Здесь мы отобразим основные типы JAVA непосредственно в JSON и наоборот.
Создайте файл класса Java с именем GsonTester в C: \> Gson_WORKSPACE .
Файл — GsonTester.java
import java.util.Arrays; import com.google.gson.Gson; public class GsonTester { public static void main(String args[]) { Gson gson = new Gson(); String name = "Mahesh Kumar"; long rollNo = 1; boolean verified = false; int[] marks = {100,90,85}; //Serialization System.out.println("{"); System.out.println("name: " + gson.toJson(name) +","); System.out.println("rollNo: " + gson.toJson(rollNo) +","); System.out.println("verified: " + gson.toJson(verified) +","); System.out.println("marks:" + gson.toJson(marks)); System.out.println("}"); //De-serialization name = gson.fromJson("\"Mahesh Kumar\"", String.class); rollNo = gson.fromJson("1", Long.class); verified = gson.fromJson("false", Boolean.class); marks = gson.fromJson("[100,90,85]", int[].class); System.out.println("name: " + name); System.out.println("rollNo: " + rollNo); System.out.println("verified: " +verified); System.out.println("marks:" + Arrays.toString(marks)); } }
Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\GSON_WORKSPACE>javac GsonTester.java
Теперь запустите GsonTester, чтобы увидеть результат —
C:\GSON_WORKSPACE>java GsonTester
Проверьте вывод.
{ name: "Mahesh Kumar", rollNo: 1, verified: false, marks:[100,90,85] } name: Mahesh Kumar rollNo: 1 verified: false marks:[100, 90, 85]
Gson — привязка данных объекта
Привязка данных объекта относится к отображению JSON на любой объект JAVA.
//Create a Gson instance Gson gson = new Gson(); //map Student object to JSON content String jsonString = gson.toJson(student); //map JSON content to Student object Student student1 = gson.fromJson(jsonString, Student.class);
пример
Давайте посмотрим привязку данных объекта в действии. Здесь мы сопоставим объект JAVA непосредственно с JSON и наоборот.
Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.
Файл — GsonTester.java
import com.google.gson.Gson; public class GsonTester { public static void main(String args[]) { Gson gson = new Gson(); Student student = new Student(); student.setAge(10); student.setName("Mahesh"); String jsonString = gson.toJson(student); System.out.println(jsonString); Student student1 = gson.fromJson(jsonString, Student.class); System.out.println(student1); } } class Student { private String name; private int age; public Student(){} public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString() { return "Student [ name: "+name+", age: "+ age+ " ]"; } }
Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\GSON_WORKSPACE>javac GsonTester.java
Теперь запустите GsonTester, чтобы увидеть результат —
C:\GSON_WORKSPACE>java GsonTester
Проверьте вывод.
{"name":"Mahesh","age":10} Student [ name: Mahesh, age: 10 ]
Gson — модель дерева
Модель дерева подготавливает представление дерева JSON в памяти. Он строит дерево узлов JsonObject. Это гибкий подход, аналогичный анализатору DOM для XML.
Создать дерево из JSON
JsonParser предоставляет указатель на корневой узел дерева после чтения JSON. Корневой узел может использоваться для обхода всего дерева. Рассмотрим следующий фрагмент кода, чтобы получить корневой узел предоставленной строки JSON.
//Create an JsonParser instance JsonParser parser = new JsonParser(); String jsonString = "{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}"; //create tree from JSON JsonElement rootNode = parser.parse(jsonString);
Модель дерева обхода
Получить каждый узел, используя относительный путь к корневому узлу при обходе дерева и обработать данные. Следующий фрагмент кода показывает, как вы можете пройти по дереву.
JsonObject details = rootNode.getAsJsonObject(); JsonElement nameNode = details.get("name"); System.out.println("Name: " +nameNode.getAsString()); JsonElement ageNode = details.get("age"); System.out.println("Age: " + ageNode.getAsInt());
пример
Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.
Файл — GsonTester.java
import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.JsonPrimitive; public class GsonTester { public static void main(String args[]) { String jsonString = "{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}"; JsonParser parser = new JsonParser(); JsonElement rootNode = parser.parse(jsonString); if (rootNode.isJsonObject()) { JsonObject details = rootNode.getAsJsonObject(); JsonElement nameNode = details.get("name"); System.out.println("Name: " +nameNode.getAsString()); JsonElement ageNode = details.get("age"); System.out.println("Age: " + ageNode.getAsInt()); JsonElement verifiedNode = details.get("verified"); System.out.println("Verified: " + (verifiedNode.getAsBoolean() ? "Yes":"No")); JsonArray marks = details.getAsJsonArray("marks"); for (int i = 0; i < marks.size(); i++) { JsonPrimitive value = marks.get(i).getAsJsonPrimitive(); System.out.print(value.getAsInt() + " "); } } } }
Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\GSON_WORKSPACE>javac GsonTester.java
Теперь запустите GsonTester, чтобы увидеть результат —
C:\GSON_WORKSPACE>java GsonTester
Проверьте вывод.
Name: Mahesh Kumar Age: 21 Verified: No 100 90 85
Gson — потоковое
Потоковый API используется для чтения токена JSON токеном. Он читает и записывает содержимое JSON как отдельные события. JsonReader и JsonWriter считывают / записывают данные как токен, называемый JsonToken .
Это самый мощный подход из трех подходов к обработке JSON. Он имеет минимальные накладные расходы и довольно быстр в операциях чтения / записи. Это аналог парсера Stax для XML.
В этой главе мы продемонстрируем использование потоковых API GSON для чтения данных JSON. Потоковый API работает с концепцией токена, и каждая деталь Json должна быть тщательно обработана.
//create JsonReader object and pass it the json source or json text. JsonReader reader = new JsonReader(new StringReader(jsonString)); //start reading json reader.beginObject(); //get the next token JsonToken token = reader.peek(); //check the type of the token if (token.equals(JsonToken.NAME)) { //get the current token fieldname = reader.nextName(); }
пример
Давайте посмотрим JsonReader в действии. Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.
Файл — GsonTester.java
import java.io.IOException; import java.io.StringReader; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; public class GsonTester { public static void main(String args[]) { String jsonString = "{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}"; JsonReader reader = new JsonReader(new StringReader(jsonString)); try { handleJsonObject(reader); } catch (IOException e) { e.printStackTrace(); } } private static void handleJsonObject(JsonReader reader) throws IOException { reader.beginObject(); String fieldname = null; while (reader.hasNext()) { JsonToken token = reader.peek(); if (token.equals(JsonToken.BEGIN_ARRAY)) { System.out.print("Marks [ "); handleJsonArray(reader); System.out.print("]"); } else if (token.equals(JsonToken.END_OBJECT)) { reader.endObject(); return; } else { if (token.equals(JsonToken.NAME)) { //get the current token fieldname = reader.nextName(); } if ("name".equals(fieldname)) { //move to next token token = reader.peek(); System.out.println("Name: "+reader.nextString()); } if("age".equals(fieldname)) { //move to next token token = reader.peek(); System.out.println("Age:" + reader.nextInt()); } if("verified".equals(fieldname)) { //move to next token token = reader.peek(); System.out.println("Verified:" + reader.nextBoolean()); } } } } private static void handleJsonArray(JsonReader reader) throws IOException { reader.beginArray(); String fieldname = null; while (true) { JsonToken token = reader.peek(); if (token.equals(JsonToken.END_ARRAY)) { reader.endArray(); break; } else if (token.equals(JsonToken.BEGIN_OBJECT)) { handleJsonObject(reader); } else if (token.equals(JsonToken.END_OBJECT)) { reader.endObject(); } else { System.out.print(reader.nextInt() + " "); } } } }
Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\GSON_WORKSPACE>javac GsonTester.java
Теперь запустите GsonTester, чтобы увидеть результат —
C:\GSON_WORKSPACE>java GsonTester
Проверьте вывод.
Name: Mahesh Kumar Age:21 Verified:false Marks [ 100 90 85 ]
Gson — Примеры сериализации
В этой главе мы обсудим сериализацию / десериализацию массивов, коллекций и обобщений.
Пример массива
int[] marks = {100,90,85}; //Serialization System.out.println("marks:" + gson.toJson(marks)); //De-serialization marks = gson.fromJson("[100,90,85]", int[].class); System.out.println("marks:" + Arrays.toString(marks));
пример
Давайте посмотрим сериализацию / десериализацию массива в действии. Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.
Файл — GsonTester.java
import java.util.Arrays; import com.google.gson.Gson; public class GsonTester { public static void main(String args[]) { Gson gson = new Gson(); int[] marks = {100,90,85}; String[] names = {"Ram","Shyam","Mohan"}; //Serialization System.out.print("{"); System.out.print("marks:" + gson.toJson(marks) + ","); System.out.print("names:" + gson.toJson(names)); System.out.println("}"); //De-serialization marks = gson.fromJson("[100,90,85]", int[].class); names = gson.fromJson("[\"Ram\",\"Shyam\",\"Mohan\"]", String[].class); System.out.println("marks:" + Arrays.toString(marks)); System.out.println("names:" + Arrays.toString(names)); } }
Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\GSON_WORKSPACE>javac GsonTester.java
Теперь запустите GsonTester, чтобы увидеть результат —
C:\GSON_WORKSPACE>java GsonTester
Проверьте вывод.
{marks:[100,90,85],names:["Ram","Shyam","Mohan"]} marks:[100, 90, 85] names:[Ram, Shyam, Mohan]
Пример коллекций
List marks = new ArrayList(); //Serialization System.out.println("marks:" + gson.toJson(marks)); //De-serialization //get the type of the collection. Type listType = new TypeToken<list>(){}.getType(); //pass the type of collection marks = gson.fromJson("[100,90,85]", listType); System.out.println("marks:" +marks);</list>
пример
Давайте посмотрим сериализацию / десериализацию коллекции в действии. Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.
Файл — GsonTester.java
import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Collection; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; public class GsonTester { public static void main(String args[]) { Gson gson = new Gson(); Collection<Integer> marks = new ArrayList<Integer>(); marks.add(100); marks.add(90); marks.add(85); //Serialization System.out.print("{"); System.out.print("marks:" + gson.toJson(marks)); System.out.println("}"); //De-serialization Type listType = new TypeToken<Collection<Integer>>(){}.getType(); marks = gson.fromJson("[100,90,85]", listType); System.out.println("marks:" +marks); } }
Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\GSON_WORKSPACE>javac GsonTester.java
Теперь запустите GsonTester, чтобы увидеть результат —
C:\GSON_WORKSPACE>java GsonTester
Проверьте вывод.
{marks:[100,90,85]} marks:[100, 90, 85]
Пример обобщения
Gson использует API отражения Java, чтобы получить тип объекта, которому должен быть сопоставлен текст Json. Но при использовании дженериков эта информация теряется во время сериализации. Чтобы противостоять этой проблеме, Gson предоставляет класс com.google.gson.reflect.TypeToken для хранения типа универсального объекта.
пример
Давайте посмотрим сериализации / десериализации Generics в действии. Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.
Файл — GsonTester.java
import java.lang.reflect.Type; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; public class GsonTester { public static void main(String args[]) { // create a shape class of type circle. Shape<Circle> shape = new Shape<Circle>(); // Create a Circle object Circle circle = new Circle(5.0); //assign circle to shape shape.setShape(circle); Gson gson = new Gson(); // Define a Type shapeType of type circle. Type shapeType = new TypeToken<Shape<Circle>>() {}.getType(); //Serialize the json as ShapeType String jsonString = gson.toJson(shape, shapeType); System.out.println(jsonString); Shape shape1 = gson.fromJson(jsonString, Shape.class); System.out.println(shape1.get().getClass()); System.out.println(shape1.get().toString()); System.out.println(shape1.getArea()); Shape shape2 = gson.fromJson(jsonString, shapeType); System.out.println(shape2.get().getClass()); System.out.println(shape2.get().toString()); System.out.println(shape2.getArea()); } } class Shape <T> { public T shape; public void setShape(T shape) { this.shape = shape; } public T get() { return shape; } public double getArea() { if(shape instanceof Circle) { return ((Circle) shape).getArea(); } else { return 0.0; } } } class Circle { private double radius; public Circle(double radius){ this.radius = radius; } public String toString() { return "Circle"; } public double getRadius() { return radius; } public void setRadius(double radius) { this.radius = radius; } public double getArea() { return (radius*radius*3.14); } }
Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\GSON_WORKSPACE>javac GsonTester.java
Теперь запустите GsonTester, чтобы увидеть результат —
C:\GSON_WORKSPACE>java GsonTester
Проверьте вывод.
{"shape":{"radius":5.0}} class com.google.gson.internal.LinkedTreeMap {radius = 5.0} 0.0 class Circle Circle 78.5
Gson — сериализация внутренних классов
В этой главе мы объясним сериализацию / десериализацию классов, имеющих внутренние классы.
Пример вложенного внутреннего класса
Student student = new Student(); student.setRollNo(1); Student.Name name = student.new Name(); name.firstName = "Mahesh"; name.lastName = "Kumar"; student.setName(name); //serialize inner class object String nameString = gson.toJson(name); System.out.println(nameString); //deserialize inner class object name = gson.fromJson(nameString,Student.Name.class); System.out.println(name.getClass());
пример
Давайте посмотрим пример сериализации / десериализации класса с внутренним классом в действии. Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.
Файл — GsonTester.java
import com.google.gson.Gson; public class GsonTester { public static void main(String args[]) { Student student = new Student(); student.setRollNo(1); Student.Name name = student.new Name(); name.firstName = "Mahesh"; name.lastName = "Kumar"; student.setName(name); Gson gson = new Gson(); String jsonString = gson.toJson(student); System.out.println(jsonString); student = gson.fromJson(jsonString, Student.class); System.out.println("Roll No: "+ student.getRollNo()); System.out.println("First Name: "+ student.getName().firstName); System.out.println("Last Name: "+ student.getName().lastName); String nameString = gson.toJson(name); System.out.println(nameString); name = gson.fromJson(nameString,Student.Name.class); System.out.println(name.getClass()); System.out.println("First Name: "+ name.firstName); System.out.println("Last Name: "+ name.lastName); } } class Student { private int rollNo; private Name name; public int getRollNo() { return rollNo; } public void setRollNo(int rollNo) { this.rollNo = rollNo; } public Name getName() { return name; } public void setName(Name name) { this.name = name; } class Name { public String firstName; public String lastName; } }
Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\GSON_WORKSPACE>javac GsonTester.java
Теперь запустите GsonTester, чтобы увидеть результат —
C:\GSON_WORKSPACE>java GsonTester
Проверьте вывод.
{"rollNo":1,"name":{"firstName":"Mahesh","lastName":"Kumar"}} Roll No: 1 First Name: Mahesh Last Name: Kumar {"firstName":"Mahesh","lastName":"Kumar"} class Student$Name First Name: Mahesh Last Name: Kumar
Пример вложенного статического внутреннего класса
Student student = new Student(); student.setRollNo(1); Student.Name name = new Student.Name(); name.firstName = "Mahesh"; name.lastName = "Kumar"; student.setName(name); //serialize static inner class object String nameString = gson.toJson(name); System.out.println(nameString); //deserialize static inner class object name = gson.fromJson(nameString,Student.Name.class); System.out.println(name.getClass());
пример
Давайте посмотрим пример сериализации / десериализации класса со статическим внутренним классом в действии. Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.
Файл — GsonTester.java
import com.google.gson.Gson; public class GsonTester { public static void main(String args[]) { Student student = new Student(); student.setRollNo(1); Student.Name name = new Student.Name(); name.firstName = "Mahesh"; name.lastName = "Kumar"; student.setName(name); Gson gson = new Gson(); String jsonString = gson.toJson(student); System.out.println(jsonString); student = gson.fromJson(jsonString, Student.class); System.out.println("Roll No: "+ student.getRollNo()); System.out.println("First Name: "+ student.getName().firstName); System.out.println("Last Name: "+ student.getName().lastName); String nameString = gson.toJson(name); System.out.println(nameString); name = gson.fromJson(nameString,Student.Name.class); System.out.println(name.getClass()); System.out.println("First Name: "+ name.firstName); System.out.println("Last Name: "+ name.lastName); } } class Student { private int rollNo; private Name name; public int getRollNo() { return rollNo; } public void setRollNo(int rollNo) { this.rollNo = rollNo; } public Name getName() { return name; } public void setName(Name name) { this.name = name; } static class Name { public String firstName; public String lastName; } }
Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\GSON_WORKSPACE>javac GsonTester.java
Теперь запустите GsonTester, чтобы увидеть результат —
C:\GSON_WORKSPACE>java GsonTester
Проверьте вывод.
{"rollNo":1,"name":{"firstName":"Mahesh","lastName":"Kumar"}} Roll No: 1 First Name: Mahesh Last Name: Kumar {"firstName":"Mahesh","lastName":"Kumar"} class Student$Name First Name: Mahesh Last Name: Kumar
Gson — Адаптеры нестандартного типа
Gson выполняет сериализацию / десериализацию объектов, используя свои встроенные адаптеры. Он также поддерживает пользовательские адаптеры. Давайте обсудим, как вы можете создать собственный адаптер и как вы можете его использовать.
Создать пользовательский адаптер
Создайте пользовательский адаптер, расширив класс TypeAdapter и передав ему тип целевого объекта. Переопределите методы чтения и записи, чтобы выполнить пользовательскую десериализацию и сериализацию соответственно.
class StudentAdapter extends TypeAdapter<Student> { @Override public Student read(JsonReader reader) throws IOException { ... } @Override public void write(JsonWriter writer, Student student) throws IOException { } }
Зарегистрируйте пользовательский адаптер
Зарегистрируйте пользовательский адаптер с помощью GsonBuilder и создайте экземпляр Gson с помощью GsonBuilder .
GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(Student.class, new StudentAdapter()); Gson gson = builder.create();
Используйте адаптер
Gson теперь будет использовать пользовательский адаптер для преобразования текста Json в объект и наоборот.
String jsonString = "{\"name\":\"Mahesh\", \"rollNo\":1}"; Student student = gson.fromJson(jsonString, Student.class); System.out.println(student); jsonString = gson.toJson(student); System.out.println(jsonString);
пример
Давайте посмотрим пример адаптера пользовательского типа в действии. Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.
Файл — GsonTester.java
import java.io.IOException; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; public class GsonTester { public static void main(String args[]) { GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(Student.class, new StudentAdapter()); builder.setPrettyPrinting(); Gson gson = builder.create(); String jsonString = "{\"name\":\"Mahesh\", \"rollNo\":1}"; Student student = gson.fromJson(jsonString, Student.class); System.out.println(student); jsonString = gson.toJson(student); System.out.println(jsonString); } } class StudentAdapter extends TypeAdapter<Student> { @Override public Student read(JsonReader reader) throws IOException { Student student = new Student(); reader.beginObject(); String fieldname = null; while (reader.hasNext()) { JsonToken token = reader.peek(); if (token.equals(JsonToken.NAME)) { //get the current token fieldname = reader.nextName(); } if ("name".equals(fieldname)) { //move to next token token = reader.peek(); student.setName(reader.nextString()); } if("rollNo".equals(fieldname)) { //move to next token token = reader.peek(); student.setRollNo(reader.nextInt()); } } reader.endObject(); return student; } @Override public void write(JsonWriter writer, Student student) throws IOException { writer.beginObject(); writer.name("name"); writer.value(student.getName()); writer.name("rollNo"); writer.value(student.getRollNo()); writer.endObject(); } } class Student { private int rollNo; private String name; public int getRollNo() { return rollNo; } public void setRollNo(int rollNo) { this.rollNo = rollNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String toString() { return "Student[ name = "+name+", roll no: "+rollNo+ "]"; } }
Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\GSON_WORKSPACE>javac GsonTester.java
Теперь запустите GsonTester, чтобы увидеть результат —
C:\GSON_WORKSPACE>java GsonTester
Проверьте вывод.
Student[ name = Mahesh, roll no: 1] { "name": "Mahesh", "rollNo": 1 }
Gson — Поддержка нулевых объектов
Gson по умолчанию генерирует оптимизированное содержимое Json, игнорируя значения NULL. Но GsonBuilder предоставляет флаги для отображения значений NULL в выводе Json с помощью метода GsonBuilder.serializeNulls () .
GsonBuilder builder = new GsonBuilder(); builder.serializeNulls(); Gson gson = builder.create();
Пример без вызова serializeNulls
Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.
Файл — GsonTester.java
import com.google.gson.Gson; public class GsonTester { public static void main(String args[]) { Gson gson = new Gson(); Student student = new Student(); student.setRollNo(1); String jsonString = gson.toJson(student); System.out.println(jsonString); student = gson.fromJson(jsonString, Student.class); System.out.println(student); } } class Student { private int rollNo; private String name; public int getRollNo() { return rollNo; } public void setRollNo(int rollNo) { this.rollNo = rollNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String toString() { return "Student[ name = "+name+", roll no: "+rollNo+ "]"; } }
Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\GSON_WORKSPACE>javac GsonTester.java
Теперь запустите GsonTester, чтобы увидеть результат —
C:\GSON_WORKSPACE>java GsonTester
Проверьте вывод.
{"rollNo": 1} Student[ name = null, roll no: 1]
Пример с вызовом serializeNulls
Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.
Файл — GsonTester.java
import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class GsonTester { public static void main(String args[]) { GsonBuilder builder = new GsonBuilder(); builder.serializeNulls(); builder.setPrettyPrinting(); Gson gson = builder.create(); Student student = new Student(); student.setRollNo(1); String jsonString = gson.toJson(student); System.out.println(jsonString); student = gson.fromJson(jsonString, Student.class); System.out.println(student); } } class Student { private int rollNo; private String name; public int getRollNo() { return rollNo; } public void setRollNo(int rollNo) { this.rollNo = rollNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String toString() { return "Student[ name = "+name+", roll no: "+rollNo+ "]"; } }
Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\GSON_WORKSPACE>javac GsonTester.java
Теперь запустите GsonTester, чтобы увидеть результат —
C:\GSON_WORKSPACE>java GsonTester
Проверьте вывод.
{ "rollNo": 1, "name": null } Student[ name = null, roll no: 1]
Gson — Поддержка версий
Gson предоставляет аннотацию @Since для управления сериализацией / десериализацией класса Json на основе его различных версий. Рассмотрим следующий класс с поддержкой версий. В этом классе мы изначально определили две переменные rollNo и name, а затем добавили проверенные в качестве новой переменной. Используя @Since, мы определили rollNo и name для версии 1.0 и подтвердили, что они имеют версию 1.1.
class Student { @Since(1.0) private int rollNo; @Since(1.0) private String name; @Since(1.1) private boolean verified; }
GsonBuilder предоставляет метод setVersion () для сериализации такого версионного класса.
GsonBuilder builder = new GsonBuilder(); builder.setVersion(1.0); Gson gson = builder.create();
пример
Давайте посмотрим пример поддержки версий в действии. Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.
Файл — GsonTester.java
import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.annotations.Since; public class GsonTester { public static void main(String args[]) { GsonBuilder builder = new GsonBuilder(); builder.setVersion(1.0); Gson gson = builder.create(); Student student = new Student(); student.setRollNo(1); student.setName("Mahesh Kumar"); student.setVerified(true); String jsonString = gson.toJson(student); System.out.println(jsonString); gson = new Gson(); jsonString = gson.toJson(student); System.out.println(jsonString); } } class Student { @Since(1.0) private int rollNo; @Since(1.0) private String name; @Since(1.1) private boolean verified; public int getRollNo() { return rollNo; } public void setRollNo(int rollNo) { this.rollNo = rollNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void setVerified(boolean verified) { this.verified = verified; } public boolean isVerified() { return verified; } }
Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\GSON_WORKSPACE>javac GsonTester.java
Теперь запустите GsonTester, чтобы увидеть результат —
C:\GSON_WORKSPACE>java GsonTester
Проверьте вывод.
{"rollNo":1,"name":"Mahesh Kumar"} {"rollNo":1,"name":"Mahesh Kumar","verified":true}
Gson — Исключение полей из сериализации
По умолчанию GSON исключает переходные и статические поля из процесса сериализации / десериализации. Давайте посмотрим на следующий пример.
пример
Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.
Файл — GsonTester.java
import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class GsonTester { public static void main(String args[]) { GsonBuilder builder = new GsonBuilder(); Gson gson = builder.create(); Student student = new Student(); student.setRollNo(1); student.setName("Mahesh Kumar"); student.setVerified(true); student.setId(1); student.className = "VI"; String jsonString = gson.toJson(student); System.out.println(jsonString); } } class Student { private int rollNo; private String name; private boolean verified; private transient int id; public static String className; public int getRollNo() { return rollNo; } public void setRollNo(int rollNo) { this.rollNo = rollNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void setVerified(boolean verified) { this.verified = verified; } public boolean isVerified() { return verified; } public int getId() { return id; } public void setId(int id) { this.id = id; } }
Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\GSON_WORKSPACE>javac GsonTester.java
Теперь запустите GsonTester, чтобы увидеть результат —
C:\GSON_WORKSPACE>java GsonTester
Проверьте вывод
{"rollNo":1,"name":"Mahesh Kumar","verified":true}
Использование excludeFieldsWithModifiers
GsonBuilder обеспечивает контроль за исключением полей с определенным модификатором, используя метод excludeFieldsWithModifiers () из процесса сериализации / десериализации. Смотрите следующий пример.
пример
Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.
Файл — GsonTester.java
import java.lang.reflect.Modifier; import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class GsonTester { public static void main(String args[]) { GsonBuilder builder = new GsonBuilder(); builder.excludeFieldsWithModifiers(Modifier.TRANSIENT); Gson gson = builder.create(); Student student = new Student(); student.setRollNo(1); student.setName("Mahesh Kumar"); student.setVerified(true); student.setId(1); student.className = "VI"; String jsonString = gson.toJson(student); System.out.println(jsonString); } } class Student { private int rollNo; private String name; private boolean verified; private transient int id; public static String className; public int getRollNo() { return rollNo; } public void setRollNo(int rollNo) { this.rollNo = rollNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void setVerified(boolean verified) { this.verified = verified; } public boolean isVerified() { return verified; } public int getId() { return id; } public void setId(int id) { this.id = id; } }
Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\GSON_WORKSPACE>javac GsonTester.java
Теперь запустите GsonTester, чтобы увидеть результат —
C:\GSON_WORKSPACE>java GsonTester
Проверьте вывод
{"rollNo":1,"name":"Mahesh Kumar","verified":true,"className":"VI"}
Использование аннотации @Expose
Gson предоставляет аннотацию @Expose для управления сериализацией / десериализацией класса Json в зависимости от его области применения. Рассмотрим следующий класс с переменной, имеющей поддержку @Expose . В этом классе переменные name и rollno должны быть доступны для сериализации. Затем мы использовали метод GsonBuilder.excludeFieldsWithoutExposeAnnotation (), чтобы указать, что только открытые переменные должны быть сериализованы / десериализованы. Смотрите следующий пример.
пример
Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.
Файл — GsonTester.java
import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.annotations.Expose; public class GsonTester { public static void main(String args[]) { GsonBuilder builder = new GsonBuilder(); builder.excludeFieldsWithoutExposeAnnotation(); Gson gson = builder.create(); Student student = new Student(); student.setRollNo(1); student.setName("Mahesh Kumar"); student.setVerified(true); student.setId(1); student.className = "VI"; String jsonString = gson.toJson(student); System.out.println(jsonString); } } class Student { @Expose private int rollNo; @Expose private String name; private boolean verified; private int id; public static String className; public int getRollNo() { return rollNo; } public void setRollNo(int rollNo) { this.rollNo = rollNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void setVerified(boolean verified) { this.verified = verified; } public boolean isVerified() { return verified; } public int getId() { return id; } public void setId(int id) { this.id = id; } }
Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\GSON_WORKSPACE>javac GsonTester.java
Теперь запустите GsonTester, чтобы увидеть результат —
C:\GSON_WORKSPACE>java GsonTester
Проверьте вывод