Gson - Hướng dẫn nhanh

Google Gson là một thư viện dựa trên Java đơn giản để tuần tự hóa các đối tượng Java thành JSON và ngược lại. Nó là một thư viện mã nguồn mở do Google phát triển.

Những điểm sau đây nêu bật lý do tại sao bạn nên sử dụng thư viện này:

  • Standardized - Gson là một thư viện chuẩn hóa do Google quản lý.

  • Efficient - Đây là một phần mở rộng đáng tin cậy, nhanh chóng và hiệu quả cho thư viện chuẩn Java.

  • Optimized - Thư viện được tối ưu hóa cao.

  • Support Generics - Nó cung cấp hỗ trợ rộng rãi cho thuốc generic.

  • Supports complex inner classes - Nó hỗ trợ các đối tượng phức tạp với hệ thống phân cấp kế thừa sâu sắc.

Đặc điểm của Gson

Dưới đây là danh sách một số tính năng nổi bật nhất của Gson -

  • Easy to use - API Gson cung cấp một mặt tiền cấp cao để đơn giản hóa các trường hợp sử dụng thường được sử dụng.

  • No need to create mapping - API Gson cung cấp ánh xạ mặc định cho hầu hết các đối tượng được tuần tự hóa.

  • Performance- Gson khá nhanh và ít tốn bộ nhớ. Nó phù hợp với đồ thị hoặc hệ thống đối tượng lớn.

  • Clean JSON - Gson tạo ra một kết quả JSON gọn gàng và dễ đọc.

  • No Dependency - Thư viện Gson không yêu cầu bất kỳ thư viện nào khác ngoài JDK.

  • Open Source- Thư viện Gson là mã nguồn mở; nó có sẵn miễn phí.

Ba cách xử lý JSON

Gson cung cấp ba cách thay thế để xử lý JSON -

API truyền trực tuyến

Nó đọc và ghi nội dung JSON dưới dạng các sự kiện rời rạc. JsonReaderJsonWriter đọc / ghi dữ liệu dưới dạng mã thông báo, được gọi là JsonToken.

Đây là cách tiếp cận mạnh mẽ nhất trong ba cách tiếp cận để xử lý JSON. Nó có chi phí thấp nhất và nó khá nhanh trong các hoạt động đọc / ghi. Nó tương tự như trình phân tích cú pháp Stax cho XML.

Mô hình cây

Nó chuẩn bị một biểu diễn cây trong bộ nhớ của tài liệu JSON. Nó xây dựng một cây gồm các nút JsonObject. Đây là một cách tiếp cận linh hoạt và tương tự như trình phân tích cú pháp DOM cho XML.

Liên kết dữ liệu

Nó chuyển đổi JSON đến và từ POJO (Đối tượng Java cũ) bằng cách sử dụng trình truy cập thuộc tính. Gson đọc / ghi JSON bằng cách sử dụng bộ điều hợp kiểu dữ liệu. Nó tương tự như trình phân tích cú pháp JAXB cho XML.

Thiết lập môi trường cục bộ

Nếu bạn vẫn muốn thiết lập môi trường cục bộ cho ngôn ngữ lập trình Java, thì phần này sẽ hướng dẫn bạn cách tải xuống và thiết lập Java trên máy của bạn. Vui lòng làm theo các bước dưới đây để thiết lập môi trường.

Java SE có sẵn miễn phí từ liên kết Tải xuống Java . Vì vậy, bạn tải xuống một phiên bản dựa trên hệ điều hành của bạn.

Làm theo hướng dẫn để tải xuống Java và chạy .exeđể cài đặt Java trên máy của bạn. Khi bạn đã cài đặt Java trên máy của mình, bạn sẽ cần đặt các biến môi trường trỏ đến thư mục cài đặt chính xác của chúng.

Thiết lập đường dẫn trong Windows 2000 / XP

Giả sử bạn đã cài đặt Java trong thư mục c: \ Program Files \ java \ jdk -

  • Nhấp chuột phải vào 'Máy tính của tôi' và chọn 'Thuộc tính'.

  • Nhấp vào nút 'Biến môi trường' trong tab 'Nâng cao'.

  • Tiếp theo, thay đổi biến 'Đường dẫn' để nó cũng chứa đường dẫn đến tệp thực thi Java. Ví dụ: nếu đường dẫn hiện được đặt thành 'C: \ WINDOWS \ SYSTEM32', thì hãy thay đổi đường dẫn của bạn thành 'C: \ WINDOWS \ SYSTEM32; c: \ Program Files \ java \ jdk \ bin'.

Thiết lập đường dẫn trong Windows 95/98 / ME

Giả sử bạn đã cài đặt Java trong thư mục c: \ Program Files \ java \ jdk -

  • Chỉnh sửa tệp 'C: \ autoexec.bat' và thêm dòng sau vào cuối: 'SET PATH =% PATH%; C: \ Program Files \ java \ jdk \ bin'

Thiết lập đường dẫn cho Linux, UNIX, Solaris, FreeBSD

Biến môi trường PATHnên được đặt để trỏ đến nơi các tệp nhị phân Java đã được cài đặt. Tham khảo tài liệu shell của bạn nếu bạn gặp khó khăn khi thực hiện việc này.

Ví dụ: nếu bạn sử dụng bash làm trình bao của mình thì bạn sẽ thêm dòng sau vào cuối '.bashrc: export PATH = / path / to / java: $ PATH'

Trình chỉnh sửa Java phổ biến

Để viết các chương trình Java của bạn, bạn sẽ cần một trình soạn thảo văn bản. Có một số IDE khá phức tạp có sẵn trên thị trường. Nhưng hiện tại, bạn có thể xem xét một trong những điều sau:

  • Notepad - Trên Windows, bạn có thể sử dụng bất kỳ trình soạn thảo văn bản đơn giản nào như Notepad (Được đề xuất cho hướng dẫn này) hoặc TextPad.

  • Netbeans - Nó là một IDE Java mã nguồn mở và miễn phí có thể được tải xuống từ https://netbeans.org/index.html.

  • Eclipse - Nó cũng là một IDE Java được phát triển bởi cộng đồng nguồn mở Eclipse và có thể được tải xuống từ https://www.eclipse.org/.

Tải xuống Gson Archive

Tải xuống phiên bản mới nhất của tệp jar Gson từ gson-2.3.1.jar. Tại thời điểm viết hướng dẫn này, chúng tôi đã tải xuống gson-2.3.1.jar và sao chép nó vào thư mục C: \> gson.

Hệ điều hành Tên lưu trữ
các cửa sổ gson-2.3.1.jar
Linux gson-2.3.1.jar
Mac gson-2.3.1.jar

Đặt Môi trường Gson

Đặt GSON_HOME biến môi trường để trỏ đến vị trí thư mục cơ sở nơi lưu trữ Gson jar trên máy của bạn.

Hệ điều hành Đầu ra
các cửa sổ Đặt biến môi trường GSON_HOME thành C: \ gson
Linux xuất GSON_HOME = / usr / local / gson
Mac xuất GSON_HOME = / Library / gson

Đặt biến CLASSPATH

Đặt CLASSPATH biến môi trường để trỏ đến vị trí jar Gson.

Hệ điều hành Đầu ra
các cửa sổ Đặt biến môi trường CLASSPATH thành% CLASSPATH%;% GSON_HOME% \ gson-2.3.1.jar;.;
Linux xuất CLASSPATH = $ CLASSPATH: $ GSON_HOME / gson-2.3.1.jar:.
Mac xuất CLASSPATH = $ CLASSPATH: $ GSON_HOME / gson-2.3.1.jar:.

Trước khi đi vào chi tiết của thư viện Google Gson, chúng ta hãy xem một ứng dụng đang hoạt động. Trong ví dụ này, chúng tôi đã tạoStudentlớp học. Chúng tôi sẽ tạo một chuỗi JSON với thông tin chi tiết về sinh viên và giải mã hóa nó thànhstudent đối tượng và sau đó tuần tự hóa nó thành một chuỗi JSON.

Thí dụ

Tạo tệp lớp Java có tên GsonTester trong 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+ " ]"; 
   }  
}

Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\GSON_WORKSPACE>javac GsonTester.java

Bây giờ hãy chạy GsonTester để xem kết quả -

C:\GSON_WORKSPACE>java GsonTester

Xác minh kết quả đầu ra.

Student [ name: Mahesh, age: 21 ] 
{ 
   "name" : "Mahesh", 
   "age" : 21 
}

Các bước cần nhớ

Sau đây là các bước quan trọng được xem xét ở đây.

Bước 1 - Tạo đối tượng Gson bằng GsonBuilder

Tạo một đối tượng Gson. Nó là một đối tượng có thể tái sử dụng.

GsonBuilder builder = new GsonBuilder(); 
builder.setPrettyPrinting(); 
Gson gson = builder.create();

Bước 2 - Hủy số hóa JSON thành Đối tượng

Sử dụng phương thức fromJson () để lấy Đối tượng từ JSON. Truyền chuỗi Json / nguồn của chuỗi Json và kiểu đối tượng làm tham số.

//Object to JSON Conversion 
Student student = gson.fromJson(jsonString, Student.class);

Bước 3 - Tuần tự hóa đối tượng thành JSON

Sử dụng phương thức toJson () để nhận biểu diễn chuỗi JSON của một đối tượng.

//Object to JSON Conversion   
jsonString = gson.toJson(student);

Gson là lớp diễn viên chính của thư viện Google Gson. Nó cung cấp các chức năng để chuyển đổi các đối tượng Java thành các cấu trúc JSON phù hợp và ngược lại. Gson lần đầu tiên được xây dựng bằng cách sử dụng GsonBuilder và sau đó, các phương thức toJson (Object) hoặc fromJson (String, Class) được sử dụng để đọc / ghi các cấu trúc JSON.

Khai báo lớp học

Sau đây là khai báo cho com.google.gson.Gson lớp học -

public final class Gson 
   extends Object

Người xây dựng

Sr.No Cấu tạo & Mô tả
1

Gson()

Xây dựng một đối tượng Gson với cấu hình mặc định.

Phương pháp lớp học

Sr.No Phương pháp & Mô tả
1

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

Phương thức này giải mã Json đọc từ cây phân tích được chỉ định thành một đối tượng của kiểu được chỉ định.

2

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

Phương thức này giải mã Json đọc từ cây phân tích được chỉ định thành một đối tượng của kiểu được chỉ định.

3

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

Đọc giá trị JSON tiếp theo từ trình đọc và chuyển đổi nó thành một đối tượng kiểu typeOfT.

4

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

Phương thức này giải mã Json đọc từ bộ đọc được chỉ định thành một đối tượng của lớp được chỉ định.

5

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

Phương pháp này giải mã Json đọc từ trình đọc được chỉ định thành một đối tượng của kiểu được chỉ định.

6

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

Phương thức này giải mã Json được chỉ định thành một đối tượng của lớp được chỉ định.

7

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

Phương thức này giải mã Json được chỉ định thành một đối tượng của kiểu được chỉ định.

số 8

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

Trả về bộ điều hợp loại cho loại.

9

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

Trả về bộ điều hợp loại cho loại.

10

<T> TypeAdapter<T> getDelegateAdapter(TypeAdapterFactory skipPast, TypeToken<T> type)

Phương pháp này được sử dụng để lấy bộ điều hợp loại thay thế cho loại được chỉ định.

11

String toJson(JsonElement jsonElement)

Chuyển đổi một cây JsonElements thành biểu diễn JSON tương đương của nó.

12

void toJson(JsonElement jsonElement, Appendable writer)

Viết ra JSON tương đương cho một cây JsonElements.

13

void toJson(JsonElement jsonElement, JsonWriter writer)

Viết JSON cho jsonElement cho người viết.

14

String toJson(Object src)

Phương thức này tuần tự hóa đối tượng được chỉ định thành biểu diễn Json tương đương của nó.

15

void toJson(Object src, Appendable writer)

Phương thức này tuần tự hóa đối tượng được chỉ định thành biểu diễn Json tương đương của nó.

16

String toJson(Object src, Type typeOfSrc)

Phương thức này tuần tự hóa đối tượng được chỉ định, bao gồm cả đối tượng có kiểu chung, thành biểu diễn Json tương đương của nó.

17

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

Phương thức này tuần tự hóa đối tượng được chỉ định, bao gồm cả đối tượng có kiểu chung, thành biểu diễn Json tương đương của nó.

18

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

Viết biểu diễn JSON của src kiểu typeOfSrc cho người viết.

19

JsonElement toJsonTree(Object src)

Phương thức này tuần tự hóa đối tượng được chỉ định thành biểu diễn tương đương của nó dưới dạng cây JsonElements.

20

JsonElement toJsonTree(Object src, Type typeOfSrc)

Phương thức này tuần tự hóa đối tượng được chỉ định, bao gồm cả những đối tượng có kiểu chung, thành biểu diễn tương đương của nó dưới dạng một cây JsonElements.

21

String toString()

Các phương thức kế thừa

Lớp này kế thừa các phương thức từ lớp sau:

  • java.lang.Object

Thí dụ

Tạo chương trình Java sau bằng bất kỳ trình soạn thảo nào bạn chọn và lưu nó tại 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+ " ]"; 
   }  
}

Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\GSON_WORKSPACE>javac GsonTester.java

Bây giờ hãy chạy GsonTester để xem kết quả -

C:\GSON_WORKSPACE>java GsonTester

Xác minh đầu ra

Student [ name: Mahesh, age: 21 ] 
{ 
   "name" : "Mahesh", 
   "age" : 21 
}

Hãy tuần tự hóa một đối tượng Java thành một tệp Json và sau đó đọc tệp Json đó để lấy lại đối tượng. Trong ví dụ này, chúng tôi đã tạoStudentlớp học. Chúng tôi sẽ tạo ra mộtstudent.json tệp sẽ có json đại diện của Student vật.

Thí dụ

Tạo một tệp lớp Java có tên GsonTester trong C:\>GSON_WORKSPACE.

Tệp - 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+ " ]";
   }  
}

Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\GSON_WORKSPACE>javac GsonTester.java

Bây giờ hãy chạy GsonTester để xem kết quả -

C:\GSON_WORKSPACE>java GsonTester

Xác minh đầu ra

Student [ name: Mahesh, age: 10 ]

Data Binding API được sử dụng để chuyển đổi JSON đến và từ POJO (Đối tượng Java cũ thuần túy) bằng cách sử dụng trình truy cập thuộc tính hoặc sử dụng chú thích. Nó có hai loại.

  • Primitives Data Binding - Chuyển đổi JSON sang và từ Java Maps, Lists, Strings, Numbers, Booleans và NULL đối tượng.

  • Objects Data Binding - Chuyển đổi JSON sang và từ bất kỳ loại JAVA nào.

Gson đọc / ghi JSON cho cả hai loại liên kết dữ liệu. Data Binding tương tự như trình phân tích cú pháp JAXB cho XML.

Liên kết dữ liệu ban đầu

Liên kết dữ liệu ban đầu đề cập đến việc ánh xạ các kiểu dữ liệu JSON sang JAVA Core và các bộ sưu tập có sẵn. Gson cung cấp các bộ điều hợp sẵn có khác nhau có thể được sử dụng để tuần tự hóa / giải mã hóa các kiểu dữ liệu nguyên thủy.

Thí dụ

Hãy xem ràng buộc dữ liệu nguyên thủy đang hoạt động. Ở đây, chúng tôi sẽ ánh xạ trực tiếp các loại cơ bản của JAVA sang JSON và ngược lại.

Tạo một tệp lớp Java có tên GsonTester trong 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)); 
   } 
}

Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\GSON_WORKSPACE>javac GsonTester.java

Bây giờ chạy GsonTester để xem kết quả -

C:\GSON_WORKSPACE>java GsonTester

Xác minh kết quả đầu ra.

{ 
   name: "Mahesh Kumar", 
   rollNo: 1, 
   verified: false, 
   marks:[100,90,85] 
} 

name: Mahesh Kumar 
rollNo: 1 
verified: false 
marks:[100, 90, 85]

Liên kết dữ liệu đối tượng đề cập đến việc ánh xạ JSON tới bất kỳ Đối tượng JAVA nào.

//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);

Thí dụ

Hãy xem ràng buộc dữ liệu đối tượng đang hoạt động. Ở đây, chúng tôi sẽ ánh xạ trực tiếp Đối tượng JAVA sang JSON và ngược lại.

Tạo một tệp lớp Java có tên GsonTester trong C: \> GSON_WORKSPACE.

Tệp - 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+ " ]"; 
   }  
}

Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\GSON_WORKSPACE>javac GsonTester.java

Bây giờ chạy GsonTester để xem kết quả -

C:\GSON_WORKSPACE>java GsonTester

Xác minh kết quả đầu ra.

{"name":"Mahesh","age":10} 
Student [ name: Mahesh, age: 10 ]

Mô hình cây chuẩn bị một biểu diễn cây trong bộ nhớ của tài liệu JSON. Nó xây dựng một cây gồm các nút JsonObject. Đây là một cách tiếp cận linh hoạt và tương tự như trình phân tích cú pháp DOM cho XML.

Tạo cây từ JSON

JsonParser cung cấp một con trỏ tới nút gốc của cây sau khi đọc JSON. Root Node có thể được sử dụng để duyệt toàn bộ cây. Hãy xem xét đoạn mã sau để lấy nút gốc của Chuỗi JSON được cung cấp.

//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);

Mô hình cây đi ngang

Nhận từng nút bằng cách sử dụng đường dẫn tương đối đến nút gốc trong khi đi qua cây và xử lý dữ liệu. Đoạn mã sau đây cho biết cách bạn có thể đi qua một cái cây.

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());

Thí dụ

Tạo một tệp lớp Java có tên GsonTester trong 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() + " ");  
         } 
      } 
   }   
}

Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\GSON_WORKSPACE>javac GsonTester.java

Bây giờ chạy GsonTester để xem kết quả -

C:\GSON_WORKSPACE>java GsonTester

Xác minh kết quả đầu ra.

Name: Mahesh Kumar 
Age: 21 
Verified: No 
100 90 85

Streaming API được sử dụng để đọc mã thông báo JSON bằng mã thông báo. Nó đọc và ghi nội dung JSON dưới dạng các sự kiện rời rạc.JsonReaderJsonWriter đọc / ghi dữ liệu dưới dạng mã thông báo, được gọi là JsonToken.

Đây là cách tiếp cận mạnh mẽ nhất trong ba cách tiếp cận để xử lý JSON. Nó có chi phí thấp nhất và nó khá nhanh trong các hoạt động đọc / ghi. Nó tương tự như trình phân tích cú pháp Stax cho XML.

Trong chương này, chúng tôi sẽ giới thiệu cách sử dụng API phát trực tuyến GSON để đọc dữ liệu JSON. Streaming API hoạt động với khái niệm mã thông báo và mọi chi tiết của Json phải được xử lý cẩn thận.

//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(); 
}

Thí dụ

Hãy xem nào JsonReadertrong hành động. Tạo một tệp lớp Java có tênGsonTester trong C: \> GSON_WORKSPACE.

Tệp - 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() + " ");            
         } 
      } 
   } 
}

Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\GSON_WORKSPACE>javac GsonTester.java

Bây giờ chạy GsonTester để xem kết quả -

C:\GSON_WORKSPACE>java GsonTester

Xác minh kết quả đầu ra.

Name: Mahesh Kumar 
Age:21 
Verified:false 
Marks [ 100 90 85 ]

Trong chương này, chúng ta sẽ thảo luận về tuần tự hóa / giải mã hóa mảng, tập hợp và generic.

Ví dụ về mảng

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));

Thí dụ

Hãy xem tuần tự hóa / hủy tuần tự hóa mảng hoạt động. Tạo một tệp lớp Java có tênGsonTester trong 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));     
   }      
}

Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\GSON_WORKSPACE>javac GsonTester.java

Bây giờ hãy chạy GsonTester để xem kết quả -

C:\GSON_WORKSPACE>java GsonTester

Xác minh kết quả đầu ra.

{marks:[100,90,85],names:["Ram","Shyam","Mohan"]} 
marks:[100, 90, 85] 
names:[Ram, Shyam, Mohan]

Ví dụ về Bộ sưu tập

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>

Thí dụ

Hãy xem hành động của tuần tự hóa / hủy tuần tự hóa Bộ sưu tập. Tạo một tệp lớp Java có tênGsonTester trong 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);     
   }      
}

Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\GSON_WORKSPACE>javac GsonTester.java

Bây giờ chạy GsonTester để xem kết quả -

C:\GSON_WORKSPACE>java GsonTester

Xác minh kết quả đầu ra.

{marks:[100,90,85]} 
marks:[100, 90, 85]

Ví dụ về Generics

Gson sử dụng API phản chiếu Java để lấy loại đối tượng mà văn bản Json sẽ được ánh xạ. Nhưng với generic, thông tin này bị mất trong quá trình tuần tự hóa. Để giải quyết vấn đề này, Gson cung cấp một lớpcom.google.gson.reflect.TypeToken để lưu trữ kiểu của đối tượng chung.

Thí dụ

Chúng ta hãy xem Generics serialization / de-serialization hoạt động. Tạo một tệp lớp Java có tênGsonTester trong 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); 
   } 
}

Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\GSON_WORKSPACE>javac GsonTester.java

Bây giờ chạy GsonTester để xem kết quả -

C:\GSON_WORKSPACE>java GsonTester

Xác minh kết quả đầu ra.

{"shape":{"radius":5.0}} 
class com.google.gson.internal.LinkedTreeMap 
{radius = 5.0} 
0.0 
class Circle 
Circle 
78.5

Trong chương này, chúng tôi sẽ giải thích việc tuần tự hóa / giải mã hóa các lớp có các lớp bên trong.

Ví dụ về lớp bên trong lồng nhau

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());

Thí dụ

Hãy xem một ví dụ về tuần tự hóa / hủy tuần tự hóa của lớp với một lớp bên trong đang hoạt động. Tạo một tệp lớp Java có tênGsonTester trong 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; 
   } 
}

Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\GSON_WORKSPACE>javac GsonTester.java

Bây giờ hãy chạy GsonTester để xem kết quả -

C:\GSON_WORKSPACE>java GsonTester

Xác minh kết quả đầu ra.

{"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

Ví dụ về lớp bên trong tĩnh lồng nhau

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());

Thí dụ

Hãy xem một ví dụ về tuần tự hóa / hủy tuần tự hóa của lớp với một lớp bên trong tĩnh đang hoạt động. Tạo tệp lớp Java có tên GsonTester trong 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; 
   } 
}

Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\GSON_WORKSPACE>javac GsonTester.java

Bây giờ chạy GsonTester để xem kết quả -

C:\GSON_WORKSPACE>java GsonTester

Xác minh kết quả đầu ra.

{"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 thực hiện tuần tự hóa / deserialization các đối tượng bằng cách sử dụng các bộ điều hợp có sẵn của nó. Nó cũng hỗ trợ các bộ điều hợp tùy chỉnh. Hãy thảo luận về cách bạn có thể tạo bộ điều hợp tùy chỉnh và cách bạn có thể sử dụng nó.

Tạo bộ điều hợp tùy chỉnh

Tạo bộ điều hợp tùy chỉnh bằng cách mở rộng TypeAdaptervà chuyển cho nó loại đối tượng được nhắm mục tiêu. Ghi đèreadwrite các phương pháp cần thực hiện tương ứng với việc giải tuần tự hóa và tuần tự hóa tùy chỉnh.

class StudentAdapter extends TypeAdapter<Student> { 
   @Override 
   public Student read(JsonReader reader) throws IOException { 
      ... 
   } 
   
   @Override 
   public void write(JsonWriter writer, Student student) throws IOException { 
   } 
}

Đăng ký Bộ điều hợp tùy chỉnh

Đăng ký bộ điều hợp tùy chỉnh bằng GsonBuilder và tạo phiên bản Gson bằng GsonBuilder.

GsonBuilder builder = new GsonBuilder(); 
builder.registerTypeAdapter(Student.class, new StudentAdapter()); 
Gson gson = builder.create();

Sử dụng bộ điều hợp

Gson bây giờ sẽ sử dụng bộ điều hợp tùy chỉnh để chuyển đổi văn bản Json thành đối tượng và ngược lại.

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);

Thí dụ

Hãy xem một ví dụ về bộ điều hợp loại tùy chỉnh đang hoạt động. Tạo một tệp lớp Java có tênGsonTester trong 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+ "]"; 
   } 
}

Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\GSON_WORKSPACE>javac GsonTester.java

Bây giờ chạy GsonTester để xem kết quả -

C:\GSON_WORKSPACE>java GsonTester

Xác minh kết quả đầu ra.

Student[ name = Mahesh, roll no: 1] 
{ 
   "name": "Mahesh", 
   "rollNo": 1 
}

Gson theo mặc định tạo nội dung Json được tối ưu hóa bỏ qua các giá trị NULL. Nhưng GsonBuilder cung cấp cờ để hiển thị giá trị NULL trong đầu ra Json bằng cách sử dụngGsonBuilder.serializeNulls() phương pháp.

GsonBuilder builder = new GsonBuilder(); 
builder.serializeNulls(); 
Gson gson = builder.create();

Ví dụ không có cuộc gọi serializeNulls

Tạo một tệp lớp Java có tên GsonTester trong C: \> GSON_WORKSPACE.

Tệp - 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+ "]"; 
   } 
}

Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\GSON_WORKSPACE>javac GsonTester.java

Bây giờ hãy chạy GsonTester để xem kết quả -

C:\GSON_WORKSPACE>java GsonTester

Xác minh kết quả đầu ra.

{"rollNo": 1} 
Student[ name = null, roll no: 1]

Ví dụ với lệnh gọi serializeNulls

Tạo tệp lớp Java có tên GsonTester trong C: \> GSON_WORKSPACE.

Tệp - 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+ "]"; 
   } 
}

Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\GSON_WORKSPACE>javac GsonTester.java

Bây giờ chạy GsonTester để xem kết quả -

C:\GSON_WORKSPACE>java GsonTester

Xác minh kết quả đầu ra.

{ 
   "rollNo": 1, 
   "name": null 
} 
Student[ name = null, roll no: 1]

Gson cung cấp @Sincechú thích để kiểm soát việc tuần tự hóa / deserialization Json của một lớp dựa trên các phiên bản khác nhau của nó. Hãy xem xét lớp sau có hỗ trợ lập phiên bản. Trong lớp này, ban đầu chúng tôi đã xác định hai biếnrollNoname và sau đó, chúng tôi đã thêm verifiednhư một biến mới. Sử dụng @Since, chúng tôi đã xác địnhrollNoname kể từ phiên bản 1.0 và được xác minh là phiên bản 1.1.

class Student { 
   @Since(1.0) 
   private int rollNo; 
   
   @Since(1.0) 
   private String name; 
   
   @Since(1.1) 
   private boolean verified;  
}

GsonBuilder cung cấp setVersion() phương thức để tuần tự hóa lớp được tạo phiên bản đó.

GsonBuilder builder = new GsonBuilder(); 
builder.setVersion(1.0);   
Gson gson = builder.create();

Thí dụ

Hãy xem một ví dụ về hỗ trợ lập phiên bản đang hoạt động. Tạo một tệp lớp Java có tênGsonTester trong C: \> GSON_WORKSPACE.

Tệp - 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; 
   } 
}

Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\GSON_WORKSPACE>javac GsonTester.java

Bây giờ hãy chạy GsonTester để xem kết quả -

C:\GSON_WORKSPACE>java GsonTester

Xác minh kết quả đầu ra.

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

Theo mặc định, GSON loại trừ các trường tạm thời và tĩnh khỏi quá trình tuần tự hóa / giải mã hóa. Hãy xem ví dụ sau.

Thí dụ

Tạo một tệp lớp Java có tên GsonTester trong 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; 
   } 
}

Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\GSON_WORKSPACE>javac GsonTester.java

Bây giờ chạy GsonTester để xem kết quả -

C:\GSON_WORKSPACE>java GsonTester

Xác minh đầu ra

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

Sử dụngludeFieldsWithModifier

GsonBuilder cung cấp quyền kiểm soát đối với việc loại trừ các trường có công cụ sửa đổi cụ thể bằng cách sử dụng phương thứcludeFieldsWithModifiers () từ quá trình tuần tự hóa / deserialization. Xem ví dụ sau.

Thí dụ

Tạo tệp lớp Java có tên GsonTester trong 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; 
   } 
}

Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\GSON_WORKSPACE>javac GsonTester.java

Bây giờ chạy GsonTester để xem kết quả -

C:\GSON_WORKSPACE>java GsonTester

Xác minh đầu ra

{"rollNo":1,"name":"Mahesh Kumar","verified":true,"className":"VI"}

Sử dụng @Expose Annotation

Gson cung cấp @Exposechú thích để kiểm soát việc tuần tự hóa / giải mã hóa Json của một lớp dựa trên phạm vi của nó. Hãy xem xét lớp sau với một biến có@Exposeủng hộ. Trong lớp học này,namerollnocác biến sẽ được hiển thị để tuần tự hóa. Sau đó, chúng tôi đã sử dụngGsonBuilder.excludeFieldsWithoutExposeAnnotation()phương pháp để chỉ ra rằng chỉ các biến được tiếp xúc mới được tuần tự hóa / giải mã hóa. Xem ví dụ sau.

Thí dụ

Tạo một tệp lớp Java có tên GsonTester trong 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; 
   } 
}

Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\GSON_WORKSPACE>javac GsonTester.java

Bây giờ chạy GsonTester để xem kết quả -

C:\GSON_WORKSPACE>java GsonTester

Xác minh đầu ra

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