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 สามวิธี -
Streaming API
มันอ่านและเขียนเนื้อหา JSON เป็นเหตุการณ์ที่ไม่ต่อเนื่อง JsonReader และ JsonWriter อ่าน / เขียนข้อมูลเป็นโทเค็นเรียกว่า JsonToken.
เป็นแนวทางที่ทรงพลังที่สุดในสามวิธีในการประมวลผล JSON มีค่าใช้จ่ายต่ำสุดและค่อนข้างรวดเร็วในการอ่าน / เขียน คล้ายกับ Stax parser สำหรับ XML
โมเดลต้นไม้
เตรียมการแสดงแผนผังในหน่วยความจำของเอกสาร JSON สร้างต้นไม้ของโหนด JsonObject เป็นแนวทางที่ยืดหยุ่นและคล้ายคลึงกับตัวแยกวิเคราะห์ DOM สำหรับ XML
การผูกข้อมูล
มันแปลง JSON เป็นและจาก POJO (Plain Old Java Object) โดยใช้ตัวเข้าถึงคุณสมบัติ Gson อ่าน / เขียน JSON โดยใช้อะแด็ปเตอร์ชนิดข้อมูล คล้ายกับตัวแยกวิเคราะห์ JAXB สำหรับ XML
การตั้งค่าสภาพแวดล้อมท้องถิ่น
หากคุณยังคงต้องการตั้งค่าสภาพแวดล้อมเฉพาะสำหรับภาษาโปรแกรม Java ส่วนนี้จะแนะนำวิธีดาวน์โหลดและตั้งค่า Java บนเครื่องของคุณ โปรดทำตามขั้นตอนที่ระบุด้านล่างเพื่อตั้งค่าสภาพแวดล้อม
Java SE เป็นอิสระที่มีอยู่จากการเชื่อมโยงดาวน์โหลด Java คุณจึงดาวน์โหลดเวอร์ชันที่อิงตามระบบปฏิบัติการของคุณ
ทำตามคำแนะนำเพื่อดาวน์โหลด Java และเรียกใช้ไฟล์ .exeเพื่อติดตั้ง Java บนเครื่องของคุณ เมื่อคุณติดตั้ง Java บนเครื่องของคุณแล้วคุณจะต้องตั้งค่าตัวแปรสภาพแวดล้อมให้ชี้ไปที่ไดเร็กทอรีการติดตั้งที่ถูกต้อง
การตั้งค่า Path ใน Windows 2000 / XP
สมมติว่าคุณติดตั้ง Java ในไดเร็กทอรีc: \ Program Files \ java \ jdk -
คลิกขวาที่ 'My Computer' และเลือก 'Properties'
คลิกที่ปุ่ม "ตัวแปรสภาพแวดล้อม" ใต้แท็บ "ขั้นสูง"
จากนั้นแก้ไขตัวแปร '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'
การตั้งค่า Path สำหรับ Linux, UNIX, Solaris, FreeBSD
ตัวแปรสภาพแวดล้อม PATHควรกำหนดให้ชี้ไปที่ตำแหน่งที่ติดตั้งไบนารี Java อ้างถึงเอกสารประกอบเชลล์ของคุณหากคุณมีปัญหาในการดำเนินการนี้
ตัวอย่างเช่นหากคุณใช้ bash เป็นเชลล์คุณจะต้องเพิ่มบรรทัดต่อไปนี้ต่อท้าย '.bashrc: export PATH = / path / to / java: $ PATH'
บรรณาธิการ Java ยอดนิยม
ในการเขียนโปรแกรม Java ของคุณคุณจะต้องมีโปรแกรมแก้ไขข้อความ มี IDE ที่ซับซ้อนอยู่ไม่น้อยในตลาด แต่ในตอนนี้คุณสามารถพิจารณาข้อใดข้อหนึ่งต่อไปนี้ -
Notepad - ใน Windows คุณสามารถใช้โปรแกรมแก้ไขข้อความธรรมดา ๆ เช่น Notepad (แนะนำสำหรับบทช่วยสอนนี้) หรือ TextPad
Netbeans - เป็น Java IDE ที่เป็นโอเพ่นซอร์สและฟรีซึ่งสามารถดาวน์โหลดได้จาก https://netbeans.org/index.html.
Eclipse - นอกจากนี้ยังเป็น Java IDE ที่พัฒนาโดยชุมชนโอเพนซอร์ส Eclipse และสามารถดาวน์โหลดได้จาก https://www.eclipse.org/.
ดาวน์โหลด Gson Archive
ดาวน์โหลดไฟล์ Gson jar เวอร์ชันล่าสุดจาก gson-2.3.1.jar. ในขณะที่เขียนบทช่วยสอนนี้เราดาวน์โหลด gson-2.3.1.jar และคัดลอกลงในโฟลเดอร์ C: \> gson
ระบบปฏิบัติการ | ชื่อที่เก็บถาวร |
---|---|
Windows | gson-2.3.1.jar |
ลินุกซ์ | gson-2.3.1.jar |
Mac | gson-2.3.1.jar |
ตั้งค่า Gson Environment
ตั้งค่า GSON_HOME ตัวแปรสภาพแวดล้อมเพื่อชี้ไปยังตำแหน่งไดเร็กทอรีฐานที่เก็บ Gson jar ไว้ในเครื่องของคุณ
ระบบปฏิบัติการ | เอาต์พุต |
---|---|
Windows | ตั้งค่าตัวแปรสภาพแวดล้อม GSON_HOME เป็น C: \ gson |
ลินุกซ์ | ส่งออก GSON_HOME = / usr / local / gson |
Mac | ส่งออก GSON_HOME = / Library / gson |
ตั้งค่าตัวแปร CLASSPATH
ตั้งค่า CLASSPATH ตัวแปรสภาพแวดล้อมเพื่อชี้ไปที่ตำแหน่งโถ Gson
ระบบปฏิบัติการ | เอาต์พุต |
---|---|
Windows | ตั้งค่าตัวแปรสภาพแวดล้อม CLASSPATH เป็น% CLASSPATH%;% GSON_HOME% \ gson-2.3.1.jar; .; |
ลินุกซ์ | ส่งออก 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 เป็น Object
ใช้เมธอด fromJson () เพื่อรับ Object จาก JSON ส่งสตริง Json / ต้นทางของสตริง Json และชนิดอ็อบเจ็กต์เป็นพารามิเตอร์
//Object to JSON Conversion
Student student = gson.fromJson(jsonString, Student.class);
ขั้นตอนที่ 3 - Serialize Object เป็น JSON
ใช้เมธอด toJson () เพื่อรับการแสดงสตริง JSON ของอ็อบเจ็กต์
//Object to JSON Conversion
jsonString = gson.toJson(student);
Gson เป็นนักแสดงหลักของห้องสมุด Google Gson มีฟังก์ชันในการแปลงอ็อบเจ็กต์ Java เพื่อจับคู่โครงสร้าง JSON และในทางกลับกัน Gson ถูกสร้างขึ้นครั้งแรกโดยใช้ GsonBuilder จากนั้นใช้วิธี toJson (Object) หรือ fromJson (String, Class) เพื่ออ่าน / เขียนโครงสร้าง JSON
การประกาศคลาส
ต่อไปนี้เป็นคำประกาศสำหรับ com.google.gson.Gson ชั้นเรียน -
public final class Gson
extends Object
ตัวสร้าง
ซีเนียร์ No | ตัวสร้างและคำอธิบาย |
---|---|
1 | Gson() สร้างวัตถุ Gson ด้วยการกำหนดค่าเริ่มต้น |
วิธีการเรียน
ซีเนียร์ No | วิธีการและคำอธิบาย |
---|---|
1 | <T> T fromJson(JsonElement json, Class<T> classOfT) เมธอดนี้ deserializes Json ที่อ่านจากแผนผังการแยกวิเคราะห์ที่ระบุลงในอ็อบเจ็กต์ของชนิดที่ระบุ |
2 | <T> T fromJson(JsonElement json, Type typeOfT) เมธอดนี้ deserializes 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) เมธอดนี้ deserializes Json ที่ระบุลงในอ็อบเจ็กต์ของคลาสที่ระบุ |
7 | <T> T fromJson(String json, Type typeOfT) เมธอดนี้ deserialize 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 ไปยัง writer |
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 ]
Data Binding API ใช้เพื่อแปลง JSON เป็นและจาก POJO (Plain Old Java Object) โดยใช้ตัวเข้าถึงคุณสมบัติหรือใช้คำอธิบายประกอบ เป็นสองประเภท
Primitives Data Binding - แปลง JSON ไปและกลับจาก Java Maps, Lists, Strings, Numbers, Booleans และ NULL object
Objects Data Binding - แปลง JSON เป็นและจากประเภท JAVA ใด ๆ
Gson อ่าน / เขียน JSON สำหรับการเชื่อมโยงข้อมูลทั้งสองประเภท การผูกข้อมูลนั้นคล้ายคลึงกับตัวแยกวิเคราะห์ JAXB สำหรับ XML
การผูกข้อมูลดั้งเดิม
การผูกข้อมูลแบบดั้งเดิมหมายถึงการแมปประเภทข้อมูล JSON กับ JAVA Core และคอลเลคชันในตัว Gson มีอะแด็ปเตอร์ inbuilt ต่างๆซึ่งสามารถใช้เพื่อทำให้เป็นอนุกรม / deserialize ชนิดข้อมูลพื้นฐาน
ตัวอย่าง
มาดูการรวมข้อมูลดั้งเดิมในการดำเนินการ ที่นี่เราจะจับคู่ประเภทพื้นฐานของ 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 Object กับ 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 ]
Tree Model เตรียมการแสดงแผนผังในหน่วยความจำของเอกสาร JSON สร้างต้นไม้ของโหนด JsonObject เป็นแนวทางที่ยืดหยุ่นและคล้ายคลึงกับตัวแยกวิเคราะห์ DOM สำหรับ XML
สร้าง Tree จาก JSON
JsonParser จัดเตรียมตัวชี้ไปยังโหนดรูทของทรีหลังจากอ่าน JSON Root Node สามารถใช้เพื่อสำรวจต้นไม้ที่สมบูรณ์ พิจารณาข้อมูลโค้ดต่อไปนี้เพื่อรับโหนดรูทของสตริง 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 parser สำหรับ XML
ในบทนี้เราจะแสดงการใช้ GSON สตรีมมิ่ง API เพื่ออ่านข้อมูล 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));
ตัวอย่าง
มาดูการทำงานของ 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
ในบทนี้เราจะอธิบายการทำให้เป็นอนุกรม / deserialization ของคลาสที่มีคลาสภายใน
ตัวอย่างคลาสภายในที่ซ้อนกัน
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 ดำเนินการซีเรียลไลเซชั่น / การดีซีเรียลไลเซชันของอ็อบเจ็กต์โดยใช้อะแด็ปเตอร์ inbuilt นอกจากนี้ยังรองรับอะแดปเตอร์แบบกำหนดเอง มาดูวิธีสร้างอะแดปเตอร์แบบกำหนดเองและวิธีใช้งาน
สร้าง Custom Adapter
สร้างอะแด็ปเตอร์แบบกำหนดเองโดยขยายไฟล์ TypeAdapterคลาสและส่งผ่านประเภทของวัตถุที่กำหนดเป้าหมาย แทนที่read และ write วิธีการดำเนินการ deserialization และ serialization แบบกำหนดเองตามลำดับ
class StudentAdapter extends TypeAdapter<Student> {
@Override
public Student read(JsonReader reader) throws IOException {
...
}
@Override
public void write(JsonWriter writer, Student student) throws IOException {
}
}
ลงทะเบียน Custom Adapter
ลงทะเบียนอะแด็ปเตอร์ที่กำหนดเองโดยใช้ 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 Call
สร้างไฟล์คลาส 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 serialization / deserialization ของคลาสตามเวอร์ชันต่างๆ พิจารณาคลาสต่อไปนี้ที่รองรับการกำหนดเวอร์ชัน ในคลาสนี้เราได้กำหนดตัวแปรไว้สองตัว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 () จากกระบวนการ serialization / deserialization ดูตัวอย่างต่อไปนี้
ตัวอย่าง
สร้างไฟล์คลาส 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 Annotation
Gson ให้ @Exposeคำอธิบายประกอบเพื่อควบคุม Json serialization / deserialization ของคลาสตามขอบเขต พิจารณาคลาสต่อไปนี้ด้วยตัวแปรที่มี@Exposeสนับสนุน. ในชั้นเรียนนี้name และ rollnoตัวแปรจะถูกเปิดเผยสำหรับการทำให้เป็นอนุกรม จากนั้นเราได้ใช้ไฟล์GsonBuilder.excludeFieldsWithoutExposeAnnotation()วิธีการระบุว่าตัวแปรที่เปิดเผยเท่านั้นที่จะถูกทำให้เป็นอนุกรม / deserialized ดูตัวอย่างต่อไปนี้
ตัวอย่าง
สร้างไฟล์คลาส 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"}