Giới thiệu
Trong nội dung bài này, chúng ta cùng nhau tìm hiểu kỹ thuật cơ bản trong Java chuyển đổi dữ liệu sang định dạng Json sử dụng bộ thư viện Gson và định dạng XML sử dụng bộ thư viện JAXB.
Những nội dung chính được trình bày trong bài này:
- Giới thiệu bộ thư viện Gson.
- Giới thiệu bộ thư viện JAXB.
- Kỹ thuật đọc / ghi dữ liệu theo định dạng Json sử dụng bộ thư viện Gson.
- Kỹ thuật đọc / ghi dữ liệu theo định dạng XML sử dụng bộ thư viện JAXB.
Kế hoạch thực hiện chung
Chúng ta cùng lên kế hoạch thực hiện chung cho nhóm bài này bằng MindMap như sau:

Giới thiệu bộ thư viện Gson
Gson (https://github.com/google/gson) là một bộ thư viện dành cho ngôn ngữ Java, cho phép người sử dụng chuyển đổi một đối tượng Java (lưu trữ dữ liệu) sang định dạng chuỗi Json và có thể chuyển đổi ngược lại từ một chuỗi Json sang một đối tượng Java.
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 hiện có mà không cần có mã nguồn của chúng.
Từ phiên bản 1.6, Gson giới thiệu hai lớp xử lý mới – JsonReader và JsonWriter để cung cấp tiến trình xử lý trực tiếp trên dữ liệu Json.
JsonWriter– Ghi trực tiếp thành Json. Cú pháp để thực thi tổng quan như sau. Chúng ta tạo một đối tượngJsonWriter. Để bắt đầu và kết thúc việc tạo một chuỗi Json, chúng ta sử dụng phương thứcbeginObject()vàendObject(). Trong khoảng giữa việc thực thi hai phương thức này, chúng ta thực hiện việc ghi dữ liệu với những cặp(khóa => giá trị).
JsonWriter writer = new JsonWriter();
writer.beginObject();
writer.name("khóa").value("giá trị");
writer.endObject();
JsonReader– Đọc trực tiếp từ Json. Cú pháp để thực thi tổng quát như sau. Chúng ta tạo một đối tượngJsonReader. Để bắt đầu và kết thúc việc đọc một chuỗi Json, chúng ta sử dụng phương thứcbeginObject()vàendObject(). Trong khoảng giữa việc thực thi hai phương thức này, chúng ta thực hiện việc ghi dữ liệu với những cặp(khóa => giá trị).
JsonReader reader = new JsonReader();
reader.beginObject();
while (reader.hasNext()) {
String name = reader.nextName();
if (name.equals("key")) { String value = reader.nextString(); }
}
reader.endObject();
Gson xử lý trực tiếp nhanh. Tuy nhiên, chúng ta cần xử lý từng cặp (khóa => giá trị) xử lý dữ liệu Json.
Giới thiệu bộ thư viện JAXB
JAXB là viết tắt của Java Architecture for XML Binding, là một thư viện sử dụng các chú thích để chuyển đổi các đối tượng Java thành nội dung XML và ngược lại.
Vì JAXB được định nghĩa thông qua một đặc tả, chúng ta có thể sử dụng các triển khai khác nhau cho tiêu chuẩn này.
Với JAXB, chúng ta thường sử dụng các chú thích cơ bản sau, cụ thể là:
@XmlRootElement: Annotation này chỉ rõ thẻ ngoài cùng của file XML là gì và do đó, nó được khai báo trên đầu một lớp.
@XmlElementWrapper: Annotation này tạo ra một phần tử XML bao quanh một danh sách.
@XmlElement: Annotation này sử dụng để khai báo một thuộc tính của đối tượng là một thẻ của file XML.
@XmlAttribute: Annotation này cũng được sử dụng để khai báo một thuộc tính của đối tượng là một thẻ của file XML.
Cú pháp để thực hiện chung là như sau. Đầu tiên, chúng ta sẽ khởi tạo đối tượng JAXBContext với đối tượng MyObject để chuyển đổi.
JAXBContext jaxbContext = JAXBContext.newInstance(MyObject.class);
Trong đối tượng JAXBContext này, nó có một phương thức để tạo một đối tượng chuyển đổi nội dung XML thành một đối tượng Java, Unmarshaller.
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Trong đối tượng JAXBContext này, nó có một phương thức để tạo đối tượng chuyển đổi đối tượng Java thành nội dung XML là Marshaller.
Marshaller marshallerObj = jaxbContext.createMarshaller ();
Thiết lập chương trình
Bước 1.
Chúng ta thực hiện tạo một project Java mới.
Chúng ta đặt tên project là XmlToJsonExample.

Bước 2.
Chúng ta nhấn chuột phải vào tên project.
Chúng ta lựa chọn New → Folder để tạo thư mục mới.

Bước 3.
Màn hình tạo thư mục mới hiện ra.
Chúng ta đặt tên thư mục là data.
Thư mục này sẽ dùng để lưu trữ những file dữ liệu XML và Json sẵn có.
Chúng ta lựa chọn nút Finish để thực hiện.

Bước 4.
Chúng ta thực hiện download file gson-2.8.5.jar tại địa chỉ:

Bước 5.
Chúng ta tiếp tục tạo các thư mục:
- Thư mục
inputvàoutputnằm bên trong thư mụcdata.
- Thư mục
libđể lưu trữ các thư viện.
Chúng ta chép file gson-2.8.5.jar vào trong thư mục lib.

Bước 6.
Chúng ta nhấn chuột phải vào tên project.
Chúng ta lựa chọn Properties.

Bước 7.
Màn hình tùy chỉnh Properties hiện ra.
Chúng ta lựa chọn mục Java Build Path và tab Libraries.
Chúng ta lựa chọn nút Add JARs để thực hiện nạp thêm thư viện.

Bước 8.
Màn hình JAR Selection hiện ra.
Chúng ta lựa chọn file gson-2.8.5.jar trong thư mục lib.
Chúng ta lựa chọn nút OK để thực hiện.

Bước 9.
Quay trở lại cửa sổ Properties.
Chúng ta nhận thấy thư viện gson-2.8.5.jar đã được nạp vào project.
Chúng ta lựa chọn nút Apply and Close để thực hiện.

Bước 10.
Màn hình chính của project hiện ra.
Chúng ta nhận thấy trong mục Referenced Libraries đã hiển thị thông tin về thư viện gson-2.8.5.jar.

Đặc tả XML và Json
Bước 1.
Chúng ta sẽ đặc tả định dạng XML / Json đối với mối quan hệ giữa các đối tượng sau:
- Quan hệ
<1 – n>giữa<department – role>.
- Quan hệ
<1 – n>giữa<role – person>.

Bước 2.
Chúng ta tạo ra 02 file sample.json và sample.xml trong folder data / input.

Bước 3.
Chúng ta đặc tả dữ liệu trong file sample.xml như sau:

Bước 4.
Chúng ta đặc tả dữ liệu trong file sample.json như sau:

Thực hiện chương trình
Đặc tả đối tượng
Bước 1 – Tạo mới các đối tượng.
Chúng ta tạo ra package model để lưu trữ các đối tượng.
Chúng ta tạo ra các class tương ứng với đặc tả trong XML / Json như sau:

Bước 2 – Đặc tả đối tượng Role – Thuộc tính.
Trước tiên chúng ta đặc tả đối tượng Role với những thuộc tính sau:

Những kỹ thuật lập trình đáng chú ý:
- Chúng ta định nghĩa annotation
@XmlRootElement(name = "role")vào phía trên của tên lớp đối tượng.
- Điều này giúp cho JAXB biết được rằng đối tượng
Rolesẽ liên hệ trực tiếp đến thẻ trong định dạng XML.
Bước 3 – Đặc tả đối tượng Role – Phương thức.
Tiếp theo chúng ta đặc tả những phương thức của đối tượng Role:

Những kỹ thuật lập trình đáng chú ý:
- Chúng ta định nghĩa annotation
@XmlAttribute(name = "id")vào phía trên tên của phương thứcgetId().
- Điều này giúp cho JAXB biết được rằng thuộc tính
idsẽ là một thuộc tính nội tại của thẻ<role>trong định dạng XML.
- Chúng ta tiếp tục định nghĩa annotation
@XmlElement(name = "position")vào phía trên tên của phương thứcgetPosition()và annotation@XmlElement(name = "salary")vào phía trên tên của phương thứcgetSalary().
- Điều này giúp cho JAXB biết được rằng thuộc tính
positionvàsalarysẽ là 02 thuộc tính nội tại của thẻ<role>được định nghĩa thành thẻ riêng<position>và<salary>trong định dạng XML.
Bước 4 – Đặc tả đối tượng Person – Thuộc tính.
Trước tiên chúng ta đặc tả đối tượng Person với những thuộc tính sau:

Bước 5 – Đặc tả đối tượng Person – Phương thức.
Tiếp theo chúng ta đặc tả những phương thức của đối tượng Person:

Bước 6 – Đặc tả đối tượng Department – Thuộc tính.
Trước tiên chúng ta đặc tả đối tượng Department với những thuộc tính sau:

Bước 7 – Đặc tả đối tượng Department – Phương thức.
Tiếp theo chúng ta đặc tả những phương thức của đối tượng Department:

Những kỹ thuật lập trình đáng chú ý:
- Chúng ta định nghĩa những annotation
@XmlElementWrapper(name = "roles")và@XmlElement(name = "role")vào phía trên của phương thứcgetRoles().
- Chúng ta định nghĩa những annotation
@XmlElementWrapper(name = "persons")và@XmlElement(name = "person")vào phía trên của phương thứcgetPersons().
- Thứ nhất, điều này giúp cho JAXB biết được rằng thuộc tính
rolesvàpersonssẽ là 02 thuộc tính nội tại của thẻ<department>được định nghĩa thành thẻ riêng<roles>và<persons>trong định dạng XML.
- Thứ hai, điều này giúp cho JAXB biết được rằng là thẻ
<roles>sẽ bao quanh một danh sách những thẻ<role>bên trong.
- Tương tự nhu vậy, điều này giúp cho JAXB biết được rằng là thẻ
<persons>sẽ bao quanh một danh sách những thẻ<person>bên trong.
Bước 8 – Đặc tả đối tượng XMLModel
Đây là đối tượng được đặc tả tương ứng với những thẻ ngoài cùng của sample.xml.
Chúng ta đặc tả đối tượng XMLModel như sau:

Đặc tả xử lý
Bước 1 – Tạo mới các lớp xử lý
Chúng ta tạo ra package service để lưu trữ các lớp xử lý.
Chúng ta tạo ra các class xử lý sau:

Bước 2 – Đặc tả lớp xử lý XMLService – Định nghĩa phương thức
Chúng ta đặc tả lớp xử lý XMLService với những phương thức như sau:
- Phương thức
getObjectFromXmlFile()thực hiện tác vụ trích xuất dữ liệu từ một file XML và chuyển đổi thành một đối tượng Java.
- Phương thức
getObjectFromXMLString()thực hiện tác vụ trích xuất dữ liệu từ một chuỗi định dạng XML và chuyển đổi thành một đối tượng Java.
- Phương thức
parseObjectToXml()thực hiện tác vụ chuyển đổi dữ liệu được lưu trữ trong một đối tượng Java thành định dạng XML và lưu thành file.

Bước 3 – Đặc tả lớp xử lý XMLService – Hiện thực getObjectFromXmlFile().
Chúng ta hiện thực phương thức getObjectFromXmlFile() như sau:

Bước 4 – Đặc tả lớp xử lý XMLService – Hiện thực getObjectFromXMLString().
Chúng ta hiện thực phương thức getObjectFromXMLString() như sau:

Bước 5 – Đặc tả lớp xử lý XMLService – Hiện thực parseObjectToXml().
Chúng ta hiện thực phương thức parseObjectToXml() như sau:

Bước 6 – Đặc tả lớp xử lý JsonService – Định nghĩa phương thức.
Chúng ta đặc tả lớp xử lý JsonService với những phương thức như sau:
- Phương thức
getDataFromJsonFile()thực hiện tác vụ trích xuất dữ liệu từ một file Json.
- Phương thức
writeDataToJsonFile()thực hiện chuyển đổi dữ liệu thành định dạng Json và ghi ra thành file.

Bước 7 – Đặc tả lớp xử lý JsonService – Hiện thực getDataFromJsonFile().
Chúng ta hiện thực phương thức getDataFromJsonFile() như sau:

Tiếp tục với phần nội dung bên trong đoạn mã:
else if (nameRole.equals("persons")) {}

Bước 8 – Đặc tả lớp xử lý JsonService – Hiện thực writeDataToJsonFile().
Chúng ta hiện thực phương thức writeDataToJsonFile() như sau:

Bước 9 – Đặc tả lớp xử lý XmlToJsonService – Định nghĩa phương thức.
Chúng ta đặc tả lớp xử lý XmlToJsonService với những phương thức như sau:
- Phương thức
transformXmlToJson()thực hiện tác vụ trích xuất dữ liệu từ một file XML và chuyển đổi thành định dạng Json và ghi thành file.
- Phương thức
transformJsonToXml()thực hiện tác vụ trích xuất dữ liệu từ một file Json và chuyển đổi thành định dạng XML và ghi thành file.

Bước 10 – Đặc tả lớp xử lý XmlToJsonService – Hiện thực transformXmlToJson().
Chúng ta hiện thực phương thức transformXmlToJson() như sau:

Bước 11 – Đặc tả lớp xử lý XmlToJsonService – Hiện thực transformJsonToXml().
Chúng ta hiện thực phương thức transformJsonToXml() như sau:

Thực thi chương trình.
Chúng ta thực thi chương trình như sau:

Kết luận
Trong nội dung bài này, chúng ta đã cùng nhau tìm hiểu những công nghệ:
- Đọc và ghi dữ liệu theo định dạng XML với bộ thư viện JAXB.
- Đọc và ghi dữ liệu theo định dạng Json với bộ thư viện Gson.
Trong những bài tiếp theo, chúng ta sẽ tiếp tục tìm hiểu những bộ thư viện khác để có nhiều sự chọn lựa hơn khi xử lý 02 định dạng này.




































































































































































































