
Thao tác với JSON trong Android
Giới thiệu
Trong quá trình phát triển ứng dụng đôi khi chúng ta cần một cú pháp lưu trữ dữ liệu có cấu trúc bằng văn bản nào đó thuận tiện cho việc tao tác ghi và đọc. Hai ứng cử viên sáng giá đáp ứng nhu cầu cho việc này được thường xuyên nhắc đến đó là JSON và XML. Trong bài này chúng ta sẽ cùng phần tích tại sao lại sử dụng JSON và cách sử dụng nó trong ứng dụng Android như thế nào.
JSON là gì
JSON là tên viết tắt của JavaScript Object Notation. Là một cú pháp để lưu trữ và chuyển đỗi dữ liệu và thuận tiện hơn XML.
Cấu trúc của JSON
Cấu trúc của JSON được bắt đầu bằng kí tự ‘{‘ và kết thúc bằng kí tự ‘}’.
Trong {} sẽ định nghĩa những object.
Ví dụ tôi muốn định nghĩa một object Person có name là “Nguyen Van A”, age là 20, address là Hồ Chí Minh thì chuỗi JSON được biểu diễn như sau:
1
{name:"Nguyen Van A", age:21, address:"Hồ Chí Minh"}
Một ví dụ nữa biểu diễn danh sách các employees:
12345
{"employees":[ {"firstName":"John", "lastName":"Doe"}, {"firstName":"Anna", "lastName":"Smith"}, {"firstName":"Peter", "lastName":"Jones"}]}
So sách với cấu trúc XML
1234567891011
<employees> <employee> <firstName>John</firstName> <lastName>Doe</lastName> </employee> <employee> <firstName>Anna</firstName> <lastName>Smith</lastName> </employee> <employee> <firstName>Peter</firstName> <lastName>Jones</lastName> </employee></employees>
Hay một chuỗi JSON phức tạp hơn mà chúng ta sẽ sử dụng để Parse trong bài viết này là:
1234567891011121314151617181920212223242526
{"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
12345678910111213141516171819202122
<widget> <debug>on</debug> <window title="Sample Konfabulator Widget"> <name>main_window</name> <width>500</width> <height>500</height> </window> <image src="Images/Sun.png" name="sun1"> <hOffset>250</hOffset> <vOffset>250</vOffset> <alignment>center</alignment> </image> <text data="Click Here" size="36" style="bold"> <name>text1</name> <hOffset>250</hOffset> <vOffset>100</vOffset> <alignment>center</alignment> <onMouseUp> sun1.opacity = (sun1.opacity / 100) * 90; </onMouseUp> </text></widget>
Chúng ta thấy rằng cùng biểu diễn một nội dung như nhau nhưng JSON gọn hơn XML. Và so sách 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 org.json.
Đọc Json trong Android
Sau đây chúng ta cùng phân tích chuổi Json để Parse nó thành các Object trong Java.
1234567891011121314151617181920212223242526
{"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;" }}}
Chúng ta thấy có tất cả 4 Object đó là
- widget: có thuộc tính là debug giá trị on và 3 thuộc tính khác là 3 object window, image, text
- window: có các thuộc tính là title, name, width, height
- image: có các thuộc tính là src, name, hOffset, vOffset, alignment.
- text: 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: Chúng ta tạo đối tượng JSONObject với đối số truyền vào là chuổi JSON trên.
123456789101112131415161718192021222324252627282930313233
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 ra JSONObject widget.
1
JSONObject widgetObject = rootObject.getJSONObject("widget");
Bước 3: Lấy ra tất các thuộc tính. Nếu là 1 Object thì phải tạo JSONObject và lấy thuộc tính bởi các phương thức.
- int getInt(String name);
- double getDouble(String name);
- boolean getBoolean(String name);
- String getString(String name);
- long getLong(String name);
- Object get(String name);
– Lấy thuộc tính debug của widget
1
String debug = widgetObject.getString("debug");
– Lấy thuộc tính window của widget
12345
JSONObject windowObject = widgetObject.getJSONObject("window"); String window_title = windowObject.getString("title"); String window_name = windowObject.getString("name"); int window_height = windowObject.getInt("height"); int window_width = windowObject.getInt("width");
– Lấy thuộc tính image của widget
123456
JSONObject imageObject = widgetObject.getJSONObject("image"); String image_src = imageObject.getString("src"); String image_name = imageObject.getString("name"); int image_hOffset = imageObject.getInt("hOffset"); int image_vOffset = imageObject.getInt("vOffset"); String image_alignment = imageObject.getString("alignment");
– Lấy thuộc tính text của widget
123456789
JSONObject textObject = widgetObject.getJSONObject("text"); String text_data = textObject.getString("data"); String text_size = textObject.getString("size"); String text_style = textObject.getString("style"); String text_name = textObject.getString("name"); int text_hOffset = textObject.getInt("hOffset"); int text_vOffset = textObject.getInt("vOffset"); String text_alignment = textObject.getString("alignment"); String text_on_mouseup = textObject.getString("onMouseUp");
Và dưới đây là soure đầy đủ của ví dụ trên
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
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); JSONObject widgetObject = rootObject.getJSONObject("widget"); String debug = widgetObject.getString("debug"); JSONObject windowObject = widgetObject.getJSONObject("window"); String window_title = windowObject.getString("title"); String window_name = windowObject.getString("name"); int window_height = windowObject.getInt("height"); int window_width = windowObject.getInt("width"); JSONObject imageObject = widgetObject.getJSONObject("image"); String image_src = imageObject.getString("src"); String image_name = imageObject.getString("name"); int image_hOffset = imageObject.getInt("hOffset"); int image_vOffset = imageObject.getInt("vOffset"); String image_alignment = imageObject.getString("alignment"); JSONObject textObject = widgetObject.getJSONObject("text"); String text_data = textObject.getString("data"); String text_size = textObject.getString("size"); String text_style = textObject.getString("style"); String text_name = textObject.getString("name"); int text_hOffset = textObject.getInt("hOffset"); int text_vOffset = textObject.getInt("vOffset"); String text_alignment = textObject.getString("alignment"); String text_on_mouseup = textObject.getString("onMouseUp"); } catch (JSONException e) { e.printStackTrace(); }
Tiếp theo chúng ta sẽ parse một chuổi JSON dưới đây:
12345
{"employees":[ {"firstName":"John", "lastName":"Doe"}, {"firstName":"Anna", "lastName":"Smith"}, {"firstName":"Peter", "lastName":"Jones"}]}
Mã nguồn parse:
1234567891011121314151617
String json = "{\"employees\":[\n" + " {\"firstName\":\"John\", \"lastName\":\"Doe\"},\n" + " {\"firstName\":\"Anna\", \"lastName\":\"Smith\"},\n" + " {\"firstName\":\"Peter\", \"lastName\":\"Jones\"}\n" + "]}"; try { JSONObject rootObject = new JSONObject(json); JSONArray employeesArray = rootObject.getJSONArray("employees"); for(int i = 0; i < employeesArray.length(); i++){ JSONObject employeeObject = employeesArray.getJSONObject(i); String firstName = employeeObject.getString("firstName"); String lastName = employeeObject.getString("lastname"); } } catch (JSONException e) { e.printStackTrace(); }
Các bạn để ý rằng chúng ta lấy về danh sách các Object thông qua phương thức getJSONArray(String name). Phương thức này trả về một JSONArray. Chúng ta sẽ qua từng phần tử trong danh sách và lấy ra các giá trị của các thuộc tính.
Ghi Json trong Android
Trước tiên tôi tạo một class City như sau:
12345678910111213141516171819202122232425
public class City { private String mName; private LatLng mPos; public City(String name, LatLng pos){ mName = name; mPos = pos; } public String getName() { return mName; } public LatLng getPos() { return mPos; } public void setName(String name) { this.mName = name; } public void setPos(LatLng pos) { this.mPos = pos; }}
Class LatLng mô tả latitude và longtitute của City
1234567891011121314151617181920212223242526272829
public class LatLng { private double mLat; private double mLng; public LatLng(){ } public LatLng(double lat, double lng){ mLat = lat; mLng = lng; } public void setLat(double lat) { this.mLat = lat; } public void setLng(double lng) { this.mLng = lng; } public double getLat() { return mLat; } public double getLng() { return mLng; }}
Tôi override lại phương thức toString của class City để chuyển thành chuổi Json như sau:
12345678910111213141516
@Override public String toString() { JSONObject jsonCity = new JSONObject(); JSONObject jsonLatLng = new JSONObject(); try { jsonLatLng.put("lat", mPos.getLat()); jsonLatLng.put("lng", mPos.getLng()); jsonCity.put("name", mName); jsonCity.put("latlng", jsonLatLng); } catch (JSONException e) { e.printStackTrace(); } return jsonCity.toString(); }
12
City city = new City("Ho Chi Minh", new LatLng(10.887469,106.790446)); Log.d("JsonWorking", "onCreate: " + city.toString());
Và ta được kết quả
1
D/JsonWorking: onCreate: {"latlng":{"lng":106.790446,"lat":10.887469},"name":"Ho Chi Minh"}
Các bạn thấy rằng việc đọc hay ghi JSON bằng thư viện có sẵn trong Android khá là dài dòng, những các bạn hãy tập làm quen với nó. Vì chúng ta sẽ hiểu được cơ chế của nó như thế nào. Bài tiếp theo tôi sẽ giới thiệu cho các bạn một thư viện hổ trợ trong việc thao tác với JSON mạnh mẽ hơn đó là GSON
Các bạn có thể download source code đầy đủ tại đây
Lời kết
Trên đây tôi đã cùng các bạn tìm hiểu về JSON cũng như việc thao tác với JSON trong Android. Mong rằng qua bài viết này có thể giúp ích cho các bạn trong quá trình học tập cũng như làm việc. Nếu có bất cứ thắc mắc nào các bạn có thể để lại comment bên dưới. Tôi sẽ nhiệt tình trả lời và giúp đỡ các bạn.
Giới thiệu
Trong quá trình phát triển ứng dụng đôi khi chúng ta cần một cú pháp lưu trữ dữ liệu có cấu trúc bằng văn bản nào đó thuận tiện cho việc tao tác ghi và đọc. Hai ứng cử viên sáng giá đáp ứng nhu cầu cho việc này được thường xuyên nhắc đến đó là JSON và XML. Trong bài này chúng ta sẽ cùng phần tích tại sao lại sử dụng JSON và cách sử dụng nó trong ứng dụng Android như thế nào.
JSON là gì
JSON là tên viết tắt của JavaScript Object Notation. Là một cú pháp để lưu trữ và chuyển đỗi dữ liệu và thuận tiện hơn XML.
Cấu trúc của JSON
Cấu trúc của JSON được bắt đầu bằng kí tự ‘{‘ và kết thúc bằng kí tự ‘}’.
Trong {} sẽ định nghĩa những object.
Ví dụ tôi muốn định nghĩa một object Person có name là “Nguyen Van A”, age là 20, address là Hồ Chí Minh thì chuỗi JSON được biểu diễn như sau:
1 |
{name:"Nguyen Van A", age:21, address:"Hồ Chí Minh"} |
Một ví dụ nữa biểu diễn danh sách các employees:
1 2 3 4 5 |
{"employees":[ {"firstName":"John", "lastName":"Doe"}, {"firstName":"Anna", "lastName":"Smith"}, {"firstName":"Peter", "lastName":"Jones"} ]} |
So sách với cấu trúc XML
1 2 3 4 5 6 7 8 9 10 11 |
<employees> <employee> <firstName>John</firstName> <lastName>Doe</lastName> </employee> <employee> <firstName>Anna</firstName> <lastName>Smith</lastName> </employee> <employee> <firstName>Peter</firstName> <lastName>Jones</lastName> </employee> </employees> |
Hay một chuỗi JSON phức tạp hơn mà chúng ta sẽ sử dụng để Parse trong bài viết này là:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
{"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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<widget> <debug>on</debug> <window title="Sample Konfabulator Widget"> <name>main_window</name> <width>500</width> <height>500</height> </window> <image src="Images/Sun.png" name="sun1"> <hOffset>250</hOffset> <vOffset>250</vOffset> <alignment>center</alignment> </image> <text data="Click Here" size="36" style="bold"> <name>text1</name> <hOffset>250</hOffset> <vOffset>100</vOffset> <alignment>center</alignment> <onMouseUp> sun1.opacity = (sun1.opacity / 100) * 90; </onMouseUp> </text> </widget> |
Chúng ta thấy rằng cùng biểu diễn một nội dung như nhau nhưng JSON gọn hơn XML. Và so sách 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 org.json.
Đọc Json trong Android
Sau đây chúng ta cùng phân tích chuổi Json để Parse nó thành các Object trong Java.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
{"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;" } }} |
Chúng ta thấy có tất cả 4 Object đó là
- widget: có thuộc tính là debug giá trị on và 3 thuộc tính khác là 3 object window, image, text
- window: có các thuộc tính là title, name, width, height
- image: có các thuộc tính là src, name, hOffset, vOffset, alignment.
- text: 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: Chúng ta tạo đối tượng JSONObject với đối số truyền vào là chuổi JSON trên.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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 ra JSONObject widget.
1 |
JSONObject widgetObject = rootObject.getJSONObject("widget"); |
Bước 3: Lấy ra tất các thuộc tính. Nếu là 1 Object thì phải tạo JSONObject và lấy thuộc tính bởi các phương thức.
- int getInt(String name);
- double getDouble(String name);
- boolean getBoolean(String name);
- String getString(String name);
- long getLong(String name);
- Object get(String name);
– Lấy thuộc tính debug của widget
1 |
String debug = widgetObject.getString("debug"); |
– Lấy thuộc tính window của widget
1 2 3 4 5 |
JSONObject windowObject = widgetObject.getJSONObject("window"); String window_title = windowObject.getString("title"); String window_name = windowObject.getString("name"); int window_height = windowObject.getInt("height"); int window_width = windowObject.getInt("width"); |
– Lấy thuộc tính image của widget
1 2 3 4 5 6 |
JSONObject imageObject = widgetObject.getJSONObject("image"); String image_src = imageObject.getString("src"); String image_name = imageObject.getString("name"); int image_hOffset = imageObject.getInt("hOffset"); int image_vOffset = imageObject.getInt("vOffset"); String image_alignment = imageObject.getString("alignment"); |
– Lấy thuộc tính text của widget
1 2 3 4 5 6 7 8 9 |
JSONObject textObject = widgetObject.getJSONObject("text"); String text_data = textObject.getString("data"); String text_size = textObject.getString("size"); String text_style = textObject.getString("style"); String text_name = textObject.getString("name"); int text_hOffset = textObject.getInt("hOffset"); int text_vOffset = textObject.getInt("vOffset"); String text_alignment = textObject.getString("alignment"); String text_on_mouseup = textObject.getString("onMouseUp"); |
Và dưới đây là soure đầy đủ của ví dụ trên
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
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); JSONObject widgetObject = rootObject.getJSONObject("widget"); String debug = widgetObject.getString("debug"); JSONObject windowObject = widgetObject.getJSONObject("window"); String window_title = windowObject.getString("title"); String window_name = windowObject.getString("name"); int window_height = windowObject.getInt("height"); int window_width = windowObject.getInt("width"); JSONObject imageObject = widgetObject.getJSONObject("image"); String image_src = imageObject.getString("src"); String image_name = imageObject.getString("name"); int image_hOffset = imageObject.getInt("hOffset"); int image_vOffset = imageObject.getInt("vOffset"); String image_alignment = imageObject.getString("alignment"); JSONObject textObject = widgetObject.getJSONObject("text"); String text_data = textObject.getString("data"); String text_size = textObject.getString("size"); String text_style = textObject.getString("style"); String text_name = textObject.getString("name"); int text_hOffset = textObject.getInt("hOffset"); int text_vOffset = textObject.getInt("vOffset"); String text_alignment = textObject.getString("alignment"); String text_on_mouseup = textObject.getString("onMouseUp"); } catch (JSONException e) { e.printStackTrace(); } |
Tiếp theo chúng ta sẽ parse một chuổi JSON dưới đây:
1 2 3 4 5 |
{"employees":[ {"firstName":"John", "lastName":"Doe"}, {"firstName":"Anna", "lastName":"Smith"}, {"firstName":"Peter", "lastName":"Jones"} ]} |
Mã nguồn parse:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
String json = "{\"employees\":[\n" + " {\"firstName\":\"John\", \"lastName\":\"Doe\"},\n" + " {\"firstName\":\"Anna\", \"lastName\":\"Smith\"},\n" + " {\"firstName\":\"Peter\", \"lastName\":\"Jones\"}\n" + "]}"; try { JSONObject rootObject = new JSONObject(json); JSONArray employeesArray = rootObject.getJSONArray("employees"); for(int i = 0; i < employeesArray.length(); i++){ JSONObject employeeObject = employeesArray.getJSONObject(i); String firstName = employeeObject.getString("firstName"); String lastName = employeeObject.getString("lastname"); } } catch (JSONException e) { e.printStackTrace(); } |
Các bạn để ý rằng chúng ta lấy về danh sách các Object thông qua phương thức getJSONArray(String name). Phương thức này trả về một JSONArray. Chúng ta sẽ qua từng phần tử trong danh sách và lấy ra các giá trị của các thuộc tính.
Ghi Json trong Android
Trước tiên tôi tạo một class City như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public class City { private String mName; private LatLng mPos; public City(String name, LatLng pos){ mName = name; mPos = pos; } public String getName() { return mName; } public LatLng getPos() { return mPos; } public void setName(String name) { this.mName = name; } public void setPos(LatLng pos) { this.mPos = pos; } } |
Class LatLng mô tả latitude và longtitute của City
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
public class LatLng { private double mLat; private double mLng; public LatLng(){ } public LatLng(double lat, double lng){ mLat = lat; mLng = lng; } public void setLat(double lat) { this.mLat = lat; } public void setLng(double lng) { this.mLng = lng; } public double getLat() { return mLat; } public double getLng() { return mLng; } } |
Tôi override lại phương thức toString của class City để chuyển thành chuổi Json như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@Override public String toString() { JSONObject jsonCity = new JSONObject(); JSONObject jsonLatLng = new JSONObject(); try { jsonLatLng.put("lat", mPos.getLat()); jsonLatLng.put("lng", mPos.getLng()); jsonCity.put("name", mName); jsonCity.put("latlng", jsonLatLng); } catch (JSONException e) { e.printStackTrace(); } return jsonCity.toString(); } |
1 2 |
City city = new City("Ho Chi Minh", new LatLng(10.887469,106.790446)); Log.d("JsonWorking", "onCreate: " + city.toString()); |
Và ta được kết quả
1 |
D/JsonWorking: onCreate: {"latlng":{"lng":106.790446,"lat":10.887469},"name":"Ho Chi Minh"} |
Các bạn thấy rằng việc đọc hay ghi JSON bằng thư viện có sẵn trong Android khá là dài dòng, những các bạn hãy tập làm quen với nó. Vì chúng ta sẽ hiểu được cơ chế của nó như thế nào. Bài tiếp theo tôi sẽ giới thiệu cho các bạn một thư viện hổ trợ trong việc thao tác với JSON mạnh mẽ hơn đó là GSON
Các bạn có thể download source code đầy đủ tại đây
Lời kết
Trên đây tôi đã cùng các bạn tìm hiểu về JSON cũng như việc thao tác với JSON trong Android. Mong rằng qua bài viết này có thể giúp ích cho các bạn trong quá trình học tập cũng như làm việc. Nếu có bất cứ thắc mắc nào các bạn có thể để lại comment bên dưới. Tôi sẽ nhiệt tình trả lời và giúp đỡ các bạn.
Hay quá bạn ơi
Cảm ơn bạn đã theo dõi bài viết. Mong bạn đón đọc các bài viết bổ ích trong thời gian tới.
hay quá bạn hướng dẫn dùng thêm Gson đi , API từ url để ví dụ được cụ thể hơn
Cảm ơn bạn. Mình sẽ viết bài đó vào tuần sau nhé!
Hay quá sư huynh ơi
Cảm ơn em nhiều.