Учебники

Gson — Краткое руководство

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 

Проверьте вывод