Chào các bạn đã đến với chủ đề tiếp của mình. Ở chủ đề này, mình sẽ tiếp tục giới thiệu đến các bạn cách làm việc với JSON trong Java. Trong automation, khi test API, chúng ta sẽ làm việc thường xuyên với data kiểu JSON này để get dữ liệu từ api response data verify với data hiển thị trên UI. Nào, chúng ta hãy bắt đầu nội dung của bài hôm nay nhé.
Nội dung
1. GSON là gì?
Google Gson là một thư viện Java hỗ trợ xử lý JSON (Chuyển đổi một chuỗi JSON thành đối tượng Java hoặc ngược lại).
Ngoài Gson cũng có rất nhiều thư viên khác hỗ trợ xử lý Json có thể kể đến như Json-simple, Jackson, json.org,… Tuy nhiên có một số lý do mà bạn nên sử dụng thư viện này:
- Chuẩn hóa: Gson là thư viện chuẩn hóa do Google quản lý
- Hiệu quả: Đâ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
- Tối ưu hóa: Thư viện được tối ưu hóa cao
- Hỗ trợ Generics: Nó cung cấp hỗ trợ rộng rãi cho generics
- Hỗ trợ các class phức tạp: 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
2. Cài đặt thư viện Gson
Để sử dụng thư viện Gson, chúng ta sẽ copy dependency sau và copy vào file pom.xml
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
3. Chuyển đổi qua lại giữa JSON và Java Object
3.1. Chuyển đổi từ Object sang Json
Giả sử mình có class sau:
public class Person {
private String name;
private int age;
private String address;
public Person(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
public String toString() {
return name + " - " + age + " - " + address;
}
}
Tiếp theo để có thể sử dụng các phương thức của Gson ta cần tạo đối tượng Gson. Để chuyển đổi một object sang JSON sử dụng phương thức toJson()
import com.google.gson.Gson;
public class Main {
public static void main(String[] args) {
//Tạo đối tượng Gson
Gson gson = new Gson();
Person person = new Person("Ngọc", 5, "Hà Giang");
//Chuyển đổi từ Object sang JSON
String result = gson.toJson(person);
System.out.println(result);
}
}
Kết quả:
3.2. Chuyển đổi từ JSON thành Object
Để chuyển đổi từ JSON sang Object ta cũng cần tạo đối tượng Gson và sử dụng phương thức fromJson()
để chuyển đổi
import com.google.gson.Gson;
public class Main {
public static void main(String[] args) {
//Tạo đối tượng Gson
Gson gson = new Gson();
//Chuyển đổi từ JSON sang Object
String json = "{\"name\":\"Linh\",\"age\":8,\"address\":\"Hà Nội\"}";
Person newPerson = gson.fromJson(json, Person.class);
System.out.println(newPerson);
}
}
Kết quả:
4. Chuyển đổi giữa JSON và mảng
4.1. Chuyển đổi từ JSON sang mảng
Giả sử mình có một file JSON như sau:
[
{
"name": "Jimmy Buncom",
"age": 30,
"address": "Indonesia"
},
{
"name": "Lucille Pollastrone",
"age": 24,
"address": "Poland"
},
{
"name": "Hort Tall",
"age": 15,
"address": "Indonesia"
},
{
"name": "Ruprecht Plampeyn",
"age": 21,
"address": "China"
},
{
"name": "Erhard Liles",
"age": 26,
"address": "Dominican Republic"
},
{
"name": "Fremont Murrow",
"age": 20,
"address": "North Korea"
}
]
import com.google.gson.Gson;
import java.io.FileNotFoundException;
import java.io.FileReader;
public class Main1 {
public static void main(String[] args) {
String dir = System.getProperty("user.dir");
System.out.println(dir);
//Tạo đối tượng Gson
Gson gson = new Gson();
//Chuyển đổi từ JSON sang mảng
Person[] persons = null;
try {
FileReader reader = new FileReader(dir + "/DataFile/person.json");
persons = gson.fromJson(reader, Person[].class);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
for (Person p : persons){
System.out.println(p);
}
}
}
Kết quả:
4.2. Chuyển đổi từ mảng sang JSON
import com.google.gson.Gson;
public class Main2 {
public static void main(String[] args) {
//Tạo đối tượng Gson
Gson gson = new Gson();
//Chuyển đổi từ mảng sang JSON
Person arr[] = new Person[5];
arr[0] = new Person("John", 25, "American");
arr[1] = new Person("Chris", 30, "France");
arr[2] = new Person("Madeline", 19, "Colombia");
arr[3] = new Person("Anna", 21, "Russia");
arr[4] = new Person("Hoàng", 27, "Việt Nam");
String rs = gson.toJson(arr);
System.out.println(rs);
}
}
Kết quả:
[
{"name": "John","age": 25,"address": "American"},
{"name": "Chris","age": 30,"address": "France"},
{"name": "Madeline","age": 19,"address": "Colombia"},
{"name": "Anna","age": 21,"address": "Russia"},
{"name": "Hoàng","age": 27,"address": "Việt Nam"}
]
5. Chuyển đổi qua lại giữa JSON và Collection
Với Collection mình sẽ sử dụng ArrayList để thực hiện ví dụ. Mình vẫn sử dụng file JSON ban nãy
5.1. Chuyển đổi từ JSON sang ArrayList
Để Gson hiểu được cấu trúc của ArrayList đó ta cần chỉ tới kiểu của nó. Thật may mắn khi Gson có một lớp để giúp ra tìm đúng kiểu dữ liệu đó là TypeToken
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.lang.reflect.Type;
import java.util.ArrayList;
public class Main4 {
public static void main(String[] args) {
String dir = System.getProperty("user.dir");
//Tạo đối tượng Gson
Gson gson = new Gson();
//Chuyển đổi từ JSON sang ArrayList
ArrayList<Person> list = new ArrayList<>();
try {
FileReader reader = new FileReader(dir + "/DataFile/person.json");
Type type = new TypeToken<ArrayList<Person>>(){}.getType();
list = gson.fromJson(reader, type);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
for(Person p : list){
System.out.println(p);
}
}
}
Kết quả:
Còn đối với chuyển đổi từ ArrayList sang JSON thì cũng chỉ cần thực hiện tương tự như với chuyển đổi từ mảng sang JSON
6. Lời kết
Như vậy mình đã giới thiệu xong cách làm việc với JSON data trong Java. Cảm ơn các bạn đã theo dõi bài viết của mình. Hẹn gặp lại các bạn ở những chủ đề tiếp theo. Chúc các bạn thành công. Bái bai.
Nguồn:
https://techmaster.vn/posts/36967/lam-viec-voi-gson-trong-java