Gson - ตัวอย่างการทำให้เป็นอนุกรม

ในบทนี้เราจะพูดถึงการทำให้เป็นอนุกรม / การแยกส่วนของอาร์เรย์คอลเลกชันและการเรียกทั่วไป

ตัวอย่างอาร์เรย์

int[] marks = {100,90,85}; 
//Serialization 
System.out.println("marks:" + gson.toJson(marks));        

//De-serialization 
marks = gson.fromJson("[100,90,85]", int[].class); 
System.out.println("marks:" + Arrays.toString(marks));

ตัวอย่าง

มาดูการทำงานของ Array serialization / de-serialization สร้างไฟล์คลาส 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>

ตัวอย่าง

มาดูการทำงานของ Collection serialization / de-serialization สร้างไฟล์คลาส 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]

ตัวอย่าง Generics

Gson ใช้ Java สะท้อน API เพื่อรับชนิดของวัตถุที่จะแมปข้อความ Json แต่ด้วยข้อมูลทั่วไปข้อมูลนี้จะสูญหายไประหว่างการทำให้เป็นอนุกรม เพื่อแก้ปัญหานี้ Gson จัดเตรียมคลาสcom.google.gson.reflect.TypeToken เพื่อจัดเก็บประเภทของวัตถุทั่วไป

ตัวอย่าง

มาดูการใช้งาน Generics serialization / de-serialization สร้างไฟล์คลาส 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