Trong bài trước, chúng ta đã tìm hiệu về Json. Trong bài này, tôi sẽ hướng dẫn bạn sử dụng thư viện Google Json để chuyển đổi Java Object sang JSON và ngược lại.
Nội dung
Giới thiệu
Gson là một thư viện Java có thể được sử dụng để chuyển đổi các đối tượng Java thành chuỗi JSON. Nó cũng có thể được sử dụng để chuyển đổi một chuỗi JSON thành một đối tượng Java tương ứng. Gson có thể làm việc với các đối tượng Java tùy ý bao gồm các đối tượng đã tồn tại từ trước mà bạn không có mã nguồn của nó.
Có một vài thư viện nguồn mở khác có thể chuyển các đối tượng Java sang JSON. Tuy nhiên, hầu hết nó yêu cầu bạn đặt các Annotation trong các lớp của bạn; hoặc một vài thứ bạn không thể làm nếu bạn không có quyền truy cập vào mã nguồn. Hầu hết cũng không hỗ trợ đầy đủ việc sử dụng Generics Java.
Mục tiêu Gson:
- Cung cấp các phương thức toJson() và fromJson() đơn giản để chuyển các đối tượng Java sang JSON và ngược lại.
- Cho phép các đối tượng không thể thay đổi có sẵn được chuyển đổi sang/ từ JSON.
- Hỗ trợ rộng rãi của Java Generics.
- Cho phép tùy chỉnh cho các đối tượng để chuyển đổi sang/ từ JSON.
- Hỗ trợ các đối tượng phức tạp (có phân cấp thừa kế nhiều cấp và sử dụng rộng rãi các kiểu dữ liệu Generics).
Download thư viện Gson:
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.2</version> </dependency>
Các ví dụ
Sử dụng Gson với kiểu dữ liệu nguyên thủy (primitives type)
package com.gpcoder.gson; import com.google.gson.Gson; public class PrimitiveExample { public static void main(String[] args) { // Serialization Gson gson = new Gson(); gson.toJson(1); // ==> 1 gson.toJson("abcd"); // ==> "abcd" gson.toJson(new Long(10)); // ==> 10 int[] values = { 1 }; gson.toJson(values); // ==> [1] // Deserialization int one = gson.fromJson("1", int.class);// ==> 1 Integer oneInteger = gson.fromJson("1", Integer.class);// ==> 1 Long oneLong = gson.fromJson("1", Long.class);// ==> 1 Boolean bool = gson.fromJson("false", Boolean.class); // ==> false String str = gson.fromJson("\"abc\"", String.class);// ==> "abcd" String[] anotherStr = gson.fromJson("[\"abc\"]", String[].class);// ==> ["abc"] } }
Các phương thức sử dụng:
- toJson() : phương thức dùng để chuyển Java Object sang chuỗi Json (quá trình này được gọi là Serialization). Phương thức này có 1 đối số là đối tượng cần chuyển sang chuỗi Json.
- fromJson() : phương thức dùng để chuyển chuỗi Json sang Java Object (quá trình này được gọi là Deserialization). Phương thức này có 2 đối số, đối số đầu tiên là chuỗi json, đối số thứ hai là kiểu dữ liệu Java Object ứng với chuỗi json.
Sử dụng Gson với Object
package com.gpcoder.gson; import com.google.gson.Gson; class Person { private String name; private String location; public Person(String name, String location) { super(); this.name = name; this.location = location; } @Override public String toString() { return "Person [name=" + name + ", location=" + location + "]"; } // Getters and setters are not required for this example. // GSON sets the fields directly using reflection. } public class ObjectExample { public static void main(String[] args) { Person person = new Person("GP Coder", "Viet Nam"); Gson gson = new Gson(); // Serialization String json = gson.toJson(person); System.out.println(json); // {"name":"GP Coder","location":"Viet Nam"} // Deserialization Person person2 = gson.fromJson(json, Person.class); System.out.println(person2); } }
Sử dụng Gson với Array
package com.gpcoder.gson; import com.google.gson.Gson; public class ArrayExample { public static void main(String[] args) { Gson gson = new Gson(); int[] ints = { 1, 2, 3, 4, 5 }; String[] strings = { "abc", "def", "ghi" }; // Serialization gson.toJson(ints); // ==> [1,2,3,4,5] gson.toJson(strings); // ==> ["abc", "def", "ghi"] // Deserialization int[] ints2 = gson.fromJson("[1,2,3,4,5]", int[].class); // ==> ints2 will be same as ints } }
Sử dụng Gson với Collection
package com.gpcoder.gson; import java.lang.reflect.Type; import java.util.Arrays; import java.util.Collection; import java.util.List; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; public class CollectionExample1 { public static void main(String[] args) { Gson gson = new Gson(); List<Integer> ints = Arrays.asList(1,2,3,4,5); // Serialization String json = gson.toJson(ints); // ==> json is [1,2,3,4,5] // Deserialization Type collectionType = new TypeToken<List<Integer>>(){}.getType(); Collection<Integer> ints2 = gson.fromJson(json, collectionType); // ==> ints2 is same as ints } }
Sử dụng Gson với Collection và Generic Type
package com.gpcoder.gson; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; public class CollectionExample2 { public static void main(String[] args) { // Gson gson = new Gson(); Gson gson = new GsonBuilder().setPrettyPrinting().create(); List<Person> persons = new ArrayList<Person>(); persons.add(new Person("GP Coder", "Viet Nam")); persons.add(new Person("Vincent", "Canada")); // Serialization String json = gson.toJson(persons); System.out.println(json); // Deserialization Type collectionType = new TypeToken<List<Person>>(){}.getType(); List<Person> persons2 = gson.fromJson(json, collectionType); // ==> persons2 is same as persons } }
Kết quả thực thi chương trình trên:
[ { "name": "GP Coder", "location": "Viet Nam" }, { "name": "Vincent", "location": "Canada" } ]
Lưu ý:
Trong ví dụ trên tôi khởi tạo đối tượng Gson sử dụng phương thức GsonBuilder().setPrettyPrinting().create() để tạo chuỗi Json có format.
Sử dụng Gson với Map
package com.gpcoder.gson; import java.lang.reflect.Type; import java.util.HashMap; import java.util.Map; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; public class MapExample { public static void main(String[] args) { Map<String, String> inputMap = new HashMap<String, String>(); inputMap.put("name", "GP Coder"); inputMap.put("site", "https://gpcoder.com"); System.out.println("Input Map: " + inputMap); Gson gson = new Gson(); // Serialization String json = gson.toJson(inputMap); System.out.println("Json: " + json); // {"site":"https://gpcoder.com","name":"GP Coder"} // Deserialization Type mapType = new TypeToken<Map<String, Object>>(){}.getType(); Map<String, String> outputMap = gson.fromJson(json, mapType); System.out.println("Output Map: " + outputMap); } }
Trên đây là những ví dụ cơ bản về sử dụng thư viện Gson trong Java. Trong các bài kế tiếp chúng ta sẽ tìm hiểu thêm các tính năng nâng cao khác như: Streaming API, Gson Annotation, Custom Serialization and Deserialization, …