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

Google Gson - это простая библиотека на основе Java для сериализации объектов Java в JSON и наоборот. Это библиотека с открытым исходным кодом, разработанная Google.

Следующие пункты подчеркивают, почему вы должны использовать эту библиотеку -

  • Standardized - Gson - это стандартизированная библиотека, управляемая Google.

  • Efficient - Это надежное, быстрое и эффективное расширение стандартной библиотеки Java.

  • Optimized - Библиотека сильно оптимизирована.

  • Support Generics - Обеспечивает обширную поддержку дженериков.

  • Supports complex inner classes - Поддерживает сложные объекты с глубокой иерархией наследования.

Особенности Gson

Вот список некоторых из самых выдающихся особенностей Gson -

  • Easy to use - Gson API предоставляет высокоуровневый фасад для упрощения часто используемых сценариев использования.

  • No need to create mapping - Gson API обеспечивает сопоставление по умолчанию для большинства сериализуемых объектов.

  • Performance- Gson довольно быстрый и занимает мало памяти. Он подходит для больших графов объектов или систем.

  • Clean JSON - Gson создает чистый и компактный результат JSON, который легко читать.

  • No Dependency - Библиотека 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.

Настройка локальной среды

Если вы все же хотите настроить локальную среду для языка программирования 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».

Настройка пути в Windows 95/98 / ME

Предполагая, что вы установили Java в каталог c: \ Program Files \ java \ jdk -

  • Отредактируйте файл '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. Но пока вы можете рассмотреть одно из следующих:

  • Notepad - В Windows вы можете использовать любой простой текстовый редактор, например Блокнот (рекомендуется для этого урока) или TextPad.

  • Netbeans - Это Java IDE с открытым исходным кодом и бесплатная загрузка, которую можно загрузить с https://netbeans.org/index.html.

  • Eclipse - Это также Java IDE, разработанная сообществом разработчиков открытого исходного кода Eclipse, которую можно загрузить с https://www.eclipse.org/.

Скачать архив Gson

Загрузите последнюю версию файла JAR Gson из gson-2.3.1.jar. На момент написания этого руководства мы загрузили gson-2.3.1.jar и скопировали его в папку C: \> gson.

Операционные системы Имя архива
Окна gson-2.3.1.jar
Linux gson-2.3.1.jar
Mac gson-2.3.1.jar

Установить среду Gson

Установить GSON_HOME переменная среды, указывающая на расположение базового каталога, в котором хранится Gson jar на вашем компьютере.

Операционные системы Вывод
Окна Установите для переменной среды GSON_HOME значение C: \ gson
Linux экспорт GSON_HOME = / usr / local / gson
Mac экспорт GSON_HOME = / Библиотека / gson

Установить переменную CLASSPATH

Установить CLASSPATH переменная среды, указывающая на расположение баночки Gson.

Операционные системы Вывод
Окна Установите для переменной среды CLASSPATH значение% CLASSPATH%;% GSON_HOME% \ gson-2.3.1.jar;.;
Linux экспорт CLASSPATH = $ CLASSPATH: $ GSON_HOME / gson-2.3.1.jar :.
Mac экспорт CLASSPATH = $ CLASSPATH: $ GSON_HOME / gson-2.3.1.jar :.

Прежде чем вдаваться в подробности библиотеки Google Gson, давайте посмотрим на приложение в действии. В этом примере мы создалиStudentкласс. Мы создадим строку JSON с данными студента и десериализуем ее, чтобыstudent объект, а затем сериализуйте его в строку JSON.

пример

Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.

File − 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, а затем для чтения / записи конструкций JSON используются методы toJson (Object) или fromJson (String, Class).

Объявление класса

Ниже приводится декларация для com.google.gson.Gson класс -

public final class Gson 
   extends Object

Конструкторы

Старший Нет Конструктор и описание
1

Gson()

Создает объект Gson с конфигурацией по умолчанию.

Методы класса

Старший Нет Метод и описание
1

<T> T fromJson(JsonElement json, Class<T> classOfT)

Этот метод десериализует Json, прочитанный из указанного дерева синтаксического анализа, в объект указанного типа.

2

<T> T fromJson(JsonElement json, Type typeOfT)

Этот метод десериализует Json, прочитанный из указанного дерева синтаксического анализа, в объект указанного типа.

3

<T> T fromJson(JsonReader reader, Type typeOfT)

Считывает следующее значение JSON из модуля чтения и преобразует его в объект типа typeOfT.

4

<T> T fromJson(Reader json, Class<T> classOfT)

Этот метод десериализует Json, прочитанный из указанного средства чтения, в объект указанного класса.

5

<T> T fromJson(Reader json, Type typeOfT)

Этот метод десериализует Json, прочитанный из указанного средства чтения, в объект указанного типа.

6

<T> T fromJson(String json, Class<T> classOfT)

Этот метод десериализует указанный Json в объект указанного класса.

7

<T> T fromJson(String json, Type typeOfT)

Этот метод десериализует указанный Json в объект указанного типа.

8

<T> TypeAdapter<T> getAdapter(Class<T> type)

Возвращает адаптер типа для типа.

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, Appendable writer)

Записывает эквивалентный JSON для дерева JsonElements.

13

void toJson(JsonElement jsonElement, JsonWriter writer)

Записывает JSON для jsonElement в писатель.

14

String toJson(Object src)

Этот метод сериализует указанный объект в его эквивалентное представление Json.

15

void toJson(Object src, Appendable writer)

Этот метод сериализует указанный объект в его эквивалентное представление Json.

16

String toJson(Object src, Type typeOfSrc)

Этот метод сериализует указанный объект, включая объекты универсальных типов, в его эквивалентное представление Json.

17

void toJson(Object src, Type typeOfSrc, Appendable writer)

Этот метод сериализует указанный объект, включая объекты универсальных типов, в его эквивалентное представление Json.

18

void toJson(Object src, Type typeOfSrc, JsonWriter writer)

Записывает JSON-представление src типа typeOfSrc в писатель.

19

JsonElement toJsonTree(Object src)

Этот метод сериализует указанный объект в его эквивалентное представление в виде дерева JsonElements.

20

JsonElement toJsonTree(Object src, Type typeOfSrc)

Этот метод сериализует указанный объект, включая объекты универсальных типов, в его эквивалентное представление в виде дерева JsonElements.

21 год

String toString()

Методы унаследованы

Этот класс наследует методы от следующего класса -

  • java.lang.Object

пример

Создайте следующую программу Java, используя любой редактор по вашему выбору, и сохраните ее, скажем, на C: /> GSON_WORKSPACE

File − 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 
}

Давайте сериализуем объект 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 ]

API привязки данных используется для преобразования JSON в POJO (обычный старый объект Java) и обратно с помощью средства доступа к свойствам или аннотаций. Он бывает двух типов.

  • Primitives Data Binding - Преобразует JSON в и из объектов Java Maps, Lists, Strings, Numbers, Booleans и NULL.

  • Objects Data Binding - Преобразует JSON в любой тип JAVA и обратно.

Gson читает / записывает JSON для обоих типов привязок данных. Привязка данных аналогична парсеру JAXB для XML.

Связывание данных примитивов

Связывание данных примитивов относится к сопоставлению JSON с типами данных JAVA Core и встроенными коллекциями. Gson предоставляет различные встроенные адаптеры, которые можно использовать для сериализации / десериализации примитивных типов данных.

пример

Давайте посмотрим на примитивную привязку данных в действии. Здесь мы сопоставим базовые типы JAVA напрямую с JSON и наоборот.

Создайте файл класса Java с именем GsonTester в C:\>Gson_WORKSPACE.

File − 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]

Связывание данных объекта относится к сопоставлению 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 ]

Модель дерева подготавливает древовидное представление документа 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.

File − 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

Streaming API используется для чтения токена JSON по токену. Он читает и записывает содержимое JSON как дискретные события.JsonReader и JsonWriter читать / записывать данные как токен, называемый JsonToken.

Это наиболее эффективный из трех подходов к обработке JSON. Он имеет самые низкие накладные расходы и довольно быстр в операциях чтения / записи. Он аналогичен парсеру Stax для XML.

В этой главе мы продемонстрируем использование потоковых API GSON для чтения данных JSON. Streaming 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 ]

В этой главе мы обсудим сериализацию / десериализацию массивов, коллекций и дженериков.

Пример массива

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.

File − 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.

File − 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.

File − 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

В этой главе мы объясним сериализацию / десериализацию классов, имеющих внутренние классы.

Пример вложенного внутреннего класса

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.

File − 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.

File − 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 выполняет сериализацию / десериализацию объектов с помощью встроенных адаптеров. Он также поддерживает настраиваемые адаптеры. Давайте обсудим, как создать собственный адаптер и как его использовать.

Создать собственный адаптер

Создайте собственный адаптер, расширив TypeAdapterclass и передав ему тип целевого объекта. Отменитьread и write методы для выполнения пользовательской десериализации и сериализации соответственно.

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.

File − 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 по умолчанию генерирует оптимизированное содержимое 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 предоставляет @Sinceаннотация для управления сериализацией / десериализацией Json класса на основе его различных версий. Рассмотрим следующий класс с поддержкой управления версиями. В этом классе мы изначально определили две переменныеrollNo и name а позже мы добавили verifiedкак новую переменную. Используя @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 исключает временные и статические поля из процесса сериализации / десериализации. Давайте посмотрим на следующий пример.

пример

Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.

File − 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.

File − 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.

File − 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

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

{"rollNo":1,"name":"Mahesh Kumar"}