
Xử lý JSON Trong Java Với GSON Như Thế Nào?
1. Các dạng biểu diễn dữ liệu thường dùng:
YAML:(YAML Ain’t Markup Language) là một chuẩn dữ liệu kiểu serialization và được sử dụng để biểu diễn dữ liệu dưới dạng text. Nó được sử dụng phổ biến để tạo ra các file config cho nhiều ứng dụng.
// Ví dụ về YAML
Employee: //định nghĩa 1 đối tượng
Emp_Name: Robert // dữ liệu key-value
Emp_Gen : No1332
Emp_dept: Developement
Emp_age : 25
Emp_Pos : Staff
XML: ( eXtensible Markup Language, tức “Ngôn ngữ đánh dấu mở rộng”) là ngôn ngữ đánh dấu mở rộng do W3C đề nghị. Và dĩ nhiên nó được dùng nhiều cho việc trao đổi và biểu diễn dữ liệu giữa các hệ thống.
// Ví dụ về XML
<Emplyoee> // Thẻ mở bắt đầu phần tử đối tượng(Element Object)
<Emp_Name>33947</Emp_Name> // thành phần con của đối tượng <Key> Value </key>
<Emp_Gen>SEC_137438957044</Emp_Gen>
<Emp_dept>Developement</Emp_dept>
<Emp_age>25</Emp_age>
<Emp_Pos>Staff</Emp_Pos>
</Emplyoee> // thẻ đóng của phần tử đối tượng
JSON:(Java Script Object Notation) là một dạng tiêu chuẩn mở dùng để trao đổi dữ liệu kiểu văn bản có cấu trúc. Gồm 2 cặp thẻ là Khóa (Key) và giá trị (Value) được ngăn cách bằng dấu “:” .Thỉnh thoảng trong giá trị của chúng có thể là một mảng (Json Array), hoặc một đối tượng (Json Objec
// Ví dụ về JSON
{ //định nghĩa 1 đối tượng (JSON Object)
"Emp_Name": "Robert", // dữ liệu key-value
"Emp_Gen" : "No1332",
"Emp_dept": "Developement",// dấu "," được dùng để ngăn cách cách giá trị
"Emp_age" : "25",
"Emp_Pos" : "Staff",
"Emp_colleague" : ["Lina","Tom","Thomas"] // Định nghĩa một mảng (JSON ARRAY)
}
Phần ví dụ trên thể hiện một chuỗi JSON được bao lại bởi dấu ngoặc nhọn {} bên trong chứa các khóa và giá trị, và một JSON array.
=> Như vậy mình đã giới thiệu qua về 3 loại thường dùng để biểu diễn và trao đổi thường dùng trong lập trình. Ở những bài khác mình sẽ giới thiệu cũng như có ví dụ cụ thể về XML và YAML sau, còn bây giờ mình sẽ tập trung vào phần chính “giới thiệu về JSON và cách xử lý JSON trong java với GSON” nhé.
2. Các kiểu dữ liệu trong JSON
Trong JSON chúng ta thường gặp 3 kiểu phổ biến nhất đó là: Object, Array và nest Objet.
- Kiểu Object:
// Kiểu JSON Object { "Emp_Name": "Robert", "Emp_Gen" : "No1332", "Emp_dept": "Developement", "Emp_age" : "25", "Emp_Pos" : "Staff" }
- Kiểu Array:
[ // dấu ngoặc vuông bắt đầu của mảng { "Emp_Name": "Robert", "Emp_Gen" : "No1332", "Emp_dept": "Developement", "Emp_age" : "25", "Emp_Pos" : "Staff" }, { "Emp_Name": "Robert", "Emp_Gen" : "No1332", "Emp_dept": "Developement", "Emp_age" : "25", "Emp_Pos" : "Staff" } ]
- Kiểu nest Object:
{ "Emplyoee" :{ "Emp_Name": "Robert", "Emp_Gen" : "No1332", "Emp_dept": "Developement", "Emp_age" : "25", "Emp_Pos" : "Staff" }, "DeptPart":{ "Part_Name": "Developemet Part", "Part_No" : "1234" } }
3. Phân tích dữ liệu JSON trong java (Sử dụng thư viện Gson)
Sau khi tìm hiểu về JSON chúng ta bắt tay vào phân tích dữ liêu trong java
Cách bước thêm cần chuẩn bị:
1.Thêm thư viện Gson vào trong Project Java (Bạn có thể tải tại đây)
Gson là một thư viện hỗ trợ xử lý JSON phổ biến trong java: nó có thể giúp bạn chuyển đổi một object hay một mảng trở thành JSON một cách dễ dàng mà không cần nhiều thao tác.
2. Sau khi đã tiến hành thêm dữ liệu chúng ta tiến hành code:
+ Tạo project java name: Codelearn trên Netbean hoặc Eclipse
+ Tạo file class : JsonDemo và code như phía dưới
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package codelearn;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;
import java.util.List;
/**
*
* @author toan
*/
public class JsonDemo {
public static void main(String[] args) {
String json ="{"
+ "\"Emp_Name\":\"Robert\""
+ ",\"Emp_Gen\":\"No1332\""
+ ",\"Emp_dept\":\"Developement\""
+ ",\"Emp_age\":\"25\""
+ ",\"Emp_Pos\":\"Staff\""
+ ",\"Emp_colleague\":[\"Lina\",\"Tom\",\"Thomas\"]"
+ "}";
// Cách 1 chuyển đổi json thành object
Gson gson = new Gson(); // khởi tạo Gson
Employee employee = gson.fromJson(json, Employee.class); // parse Gson về object
System.out.println("Emp_Name:"+ employee.emp_Name);
System.out.println("Emp_Gen:"+ employee.emp_Gen);
System.out.println("Emp_age:"+ employee.emp_age);
System.out.println("Emp_Pos:"+ employee.emp_Pos);
System.out.println("Emp_dept:"+ employee.emp_dept);
System.out.println("Emp_colleague:"+ employee.emp_colleague.toString());
// // cách 2: không chuyển đổi json thành object mà parse trực tiếp
// JsonObject jsonObject =JsonParser.parseString(json).getAsJsonObject();// Nếu bạn không muốn chuyển thành object có thể sử dụng
// JsonArray jsonArray = (JsonArray) jsonObject.get("Emp_colleague");
// System.out.println("Emp_Name:"+ jsonObject.get("Emp_Name"));
// System.out.println("Emp_Gen:"+ jsonObject.get("Emp_Gen"));
// System.out.println("Emp_age:"+ jsonObject.get("Emp_age"));
// System.out.println("Emp_Pos:"+ jsonObject.get("Emp_Pos"));
// System.out.println("Emp_dept:"+ jsonObject.get("Emp_dept"));
// System.out.println("Emp_colleague:"+ jsonObject.get("Emp_colleague").toString());
}
public class Employee
{
@SerializedName("Emp_Name") // SerializedName giống với Key của Json
public String emp_Name;
@SerializedName("Emp_Gen")
public String emp_Gen;
@SerializedName("Emp_dept")
public String emp_dept;
@SerializedName("Emp_age")
public String emp_age;
@SerializedName("Emp_Pos")
public String emp_Pos;
@SerializedName("Emp_colleague")
public List<String> emp_colleague;
}
}
Mình sử dụng 2 cách để parse JSON và có chú thích cụ thể:
Cách 1: tạo object Employee có cấu trúc giống hệt với cấu trúc JSON gồm các @SerializedName(“Emp_Name”) là Key
Cách 2: mình chuyển đổi JSON thành JsonObject mà không cần phải tạo một Object cho nó, lấy từng giá trị của JSON dựa vào Key jsonObject.get(“Emp_Name”).
4. Kết Luận
Vậy là xong qua bài viết này mình đã giới thiệu tới các bạn biết sơ qua về XML,YAML,JSON và cách parse JSON sử dụng thư viện GSON một cách đơn giản mà không cần tốn quá nhiều công sức. Có thể mình sẽ có một bài hướng dẫn parse XML,YAML thông qua một ứng dụng cụ thể trên Android hoặc Java.
Post Comment