Trong quá trình phát triển ứng dụng sẽ cần lưu trữ dữ liệu hoặc cần giao tiếp, truyền nhận dữ liệu từ nhiều thiết bị, việc chuyển đổi dữ liệu thành dạng văn bản sẽ giúp thuận tiện cho quán trình này.
Để hỗ trợ cho điều này JSON ra đời, ngoài ra còn có nhiều phương pháp chuyển đổi sang nhiều loại cấu trúc với cú pháp khác nhau như XML hoặc mỗi ngôn ngữ lập trình có thể hỗ trợ riêng cách thức của ngôn ngữ đó.
JSON là gì?
JSON là tên viết tắt của JavaScript Object Notation, là 1 chuẩn để lưu trữ và chuyển đổi dữ liệu và thuận tiện, JSON rất dễ đọc và dễ phân tích.
Cấu trúc của JSON
Cấu trúc của JSON, được bắt đầu bằng kí tự
John
Doe
Anna
Smith
Peter
Jones
0 và kết thúc bằng kí tự
John
Doe
Anna
Smith
Peter
Jones
1. Trong
John
Doe
Anna
Smith
Peter
Jones
2 sẽ định nghĩa những đối tượng.
Ví dụ định nghĩa 1 đối tượng
John
Doe
Anna
Smith
Peter
Jones
3 có tên là
John
Doe
Anna
Smith
Peter
Jones
4 và họ là
John
Doe
Anna
Smith
Peter
Jones
5 thì chuỗi JSON được biểu diễn như sau:
{"firstName": "Khoa", "lastName": "Vo"}
Biểu diễn danh sách các
John
Doe
Anna
Smith
Peter
Jones
6:
{employees: [
{"firstName": "John", "lastName": "Doe"},
{"firstName": "Anna", "lastName": "Smith"},
{"firstName": "Peter", "lastName": "Jones"}
]}So sánh với cấu trúc XML:
John
Doe
Anna
Smith
Peter
Jones
Hay 1 chuỗi JSON phức tạp sẽ sử dụng để
John
Doe
Anna
Smith
Peter
Jones
7 trong bài viết này là:
{"widget": { "debug": "on", "window": { "title": "Sample Konfabulator Widget", "name": "main_window", "width": 500, "height": 500 }, "image": { "src": "Images/Sun.png", "name": "sun1", "hOffset": 250, "vOffset": 250, "alignment": "center" }, "text": { "data": "Click Here", "size": 36, "style": "bold", "name": "text1", "hOffset": 250, "vOffset": 100, "alignment": "center", "onMouseUp": "sun1.opacity = [sun1.opacity / 100] * 90;" } }}
Cấu trúc biểu diễn bằng XML:
on main_window 500 500 250 250 center text1 250 100 center sun1.opacity = [sun1.opacity / 100] * 90;
Biểu diễn 1 nội dung như nhau nhưng JSON gọn hơn XML, so sánh về tốc độ parse thì JSON nhanh hơn rất nhiều so với XML.
Thao tác với JSON trong Android
Trong Android, các thư viện dùng để thao tác với JSON nằm trong package
John
Doe
Anna
Smith
Peter
Jones
8.
Đọc JSON trong Android
Cùng phân tích chuỗi JSON để parse thành các đối tượng trong Java.
{"widget": { "debug": "on", "window": { "title": "Sample Konfabulator Widget", "name": "main_window", "width": 500, "height": 500 }, "image": { "src": "Images/Sun.png", "name": "sun1", "hOffset": 250, "vOffset": 250, "alignment": "center" }, "text": { "data": "Click Here", "size": 36, "style": "bold", "name": "text1", "hOffset": 250, "vOffset": 100, "alignment": "center", "onMouseUp": "sun1.opacity = [sun1.opacity / 100] * 90;" } }}
Có tất cả 4 đối tượng:
-
9: có thuộc tính là debug giá trị on và 3 thuộc tính khác là 3 đối tượng window, image, text.John Doe Anna Smith Peter Jones
- {"widget": { "debug": "on", "window": { "title": "Sample Konfabulator Widget", "name": "main_window", "width": 500, "height": 500 }, "image": { "src": "Images/Sun.png", "name": "sun1", "hOffset": 250, "vOffset": 250, "alignment": "center" }, "text": { "data": "Click Here", "size": 36, "style": "bold", "name": "text1", "hOffset": 250, "vOffset": 100, "alignment": "center", "onMouseUp": "sun1.opacity = [sun1.opacity / 100] * 90;" } }} 0: có các thuộc tính là title, name, width, height.
- {"widget": { "debug": "on", "window": { "title": "Sample Konfabulator Widget", "name": "main_window", "width": 500, "height": 500 }, "image": { "src": "Images/Sun.png", "name": "sun1", "hOffset": 250, "vOffset": 250, "alignment": "center" }, "text": { "data": "Click Here", "size": 36, "style": "bold", "name": "text1", "hOffset": 250, "vOffset": 100, "alignment": "center", "onMouseUp": "sun1.opacity = [sun1.opacity / 100] * 90;" } }} 1: có các thuộc tính là src, name, hOffset, vOffset, alignment.
- {"widget": { "debug": "on", "window": { "title": "Sample Konfabulator Widget", "name": "main_window", "width": 500, "height": 500 }, "image": { "src": "Images/Sun.png", "name": "sun1", "hOffset": 250, "vOffset": 250, "alignment": "center" }, "text": { "data": "Click Here", "size": 36, "style": "bold", "name": "text1", "hOffset": 250, "vOffset": 100, "alignment": "center", "onMouseUp": "sun1.opacity = [sun1.opacity / 100] * 90;" } }} 2: có các thuộc tính là data, size, style, name, hOffset, vOffset, alignment, onMouseUp.
Các bước parse như sau:
Bước 1: tạo đối tượng
{"widget": { "debug": "on", "window": { "title": "Sample Konfabulator Widget", "name": "main_window", "width": 500, "height": 500 }, "image": { "src": "Images/Sun.png", "name": "sun1", "hOffset": 250, "vOffset": 250, "alignment": "center" }, "text": { "data": "Click Here", "size": 36, "style": "bold", "name": "text1", "hOffset": 250, "vOffset": 100, "alignment": "center", "onMouseUp": "sun1.opacity = [sun1.opacity / 100] * 90;" } }}
3 với đối số truyền vào là chuỗi JSON trên.
String json = "{\"widget\": {\n" +
" \"debug\": \"on\",\n" +
" \"window\": {\n" +
" \"title\": \"Sample Konfabulator Widget\",\n" +
" \"name\": \"main_window\",\n" +
" \"width\": 500,\n" +
" \"height\": 500\n" +
" },\n" +
" \"image\": { \n" +
" \"src\": \"Images/Sun.png\",\n" +
" \"name\": \"sun1\",\n" +
" \"hOffset\": 250,\n" +
" \"vOffset\": 250,\n" +
" \"alignment\": \"center\"\n" +
" },\n" +
" \"text\": {\n" +
" \"data\": \"Click Here\",\n" +
" \"size\": 36,\n" +
" \"style\": \"bold\",\n" +
" \"name\": \"text1\",\n" +
" \"hOffset\": 250,\n" +
" \"vOffset\": 100,\n" +
" \"alignment\": \"center\",\n" +
" \"onMouseUp\": \"sun1.opacity = [sun1.opacity / 100] * 90;\"\n" +
" }\n" +
"}}";
try {JSONObject rootObject = new JSONObject[json];
} catch [JSONException e] {e.printStackTrace[];
}Bước 2: lấy
{"widget": { "debug": "on", "window": { "title": "Sample Konfabulator Widget", "name": "main_window", "width": 500, "height": 500 }, "image": { "src": "Images/Sun.png", "name": "sun1", "hOffset": 250, "vOffset": 250, "alignment": "center" }, "text": { "data": "Click Here", "size": 36, "style": "bold", "name": "text1", "hOffset": 250, "vOffset": 100, "alignment": "center", "onMouseUp": "sun1.opacity = [sun1.opacity / 100] * 90;" } }}
3 widget.
JSONObject widgetObject = rootObject.getJSONObject["widget"];
Bước 3: Lấy ra tất các thuộc tính, nếu là 1 đối tượng thì phải tạo
{"widget": { "debug": "on", "window": { "title": "Sample Konfabulator Widget", "name": "main_window", "width": 500, "height": 500 }, "image": { "src": "Images/Sun.png", "name": "sun1", "hOffset": 250, "vOffset": 250, "alignment": "center" }, "text": { "data": "Click Here", "size": 36, "style": "bold", "name": "text1", "hOffset": 250, "vOffset": 100, "alignment": "center", "onMouseUp": "sun1.opacity = [sun1.opacity / 100] * 90;" } }}
3 và lấy thuộc tính bởi các phương thức: