Android and JSON (GSON) การนำ JSON ปัจจุบัน JSON ได้กลายเป็นมาตรฐานในการรับส่งข้อมูลผ่าน Interface ต่าง ๆ ไปแล้ว โดยส่วนมากจะใช้กับการรับส่งข้อมูลภายนอก App เช่น ข้อมูลผ่าน HTTP , Web Services หรือแม้กระทั่ง API ที่ใช้กันบน Cloud Server ก็ยังใช้ JSON มาเป็นมาตรฐานในการรับส่งข้อมูล ฉะนั้นในการเขียน Android App จำเป็นมากที่จะต้องรู้จักวิธีการใช้งาน JSON ให้ถูกต้อง เพราะมันจะช่วยให้การจัดการกับข้อมูลนั้นง่ายและสะดวกมาก ๆ
สำหรับ GSON เป็น Library ตัวหนึ่งที่ค่อยข้างจะได้รับความนิยมมาก เพราะมันมีรูปแบบการใช้งานที่ง่ายมาก และมันยังถูกนำไปใช้กับ Library อื่น ๆ อีกหลายตัว อาทิเช่น OkHttp , AsyncHttpClient , Ion โดย Library กลุ่มนี้ช่วยในการติดต่อรับ-ส่งข้อมูลผ่าน HTTP ซึ่งใช้ GSON ในการที่จะแปลงข้อมูลได้ในทั้งรูปแบบการส่งและรับ
Download GSON for Android
Grandle for Android Studio
compile 'com.google.code.gson:gson:2.5'
กรณีใช้ไฟล์ JAR ให้ดาวน์โหลดมา Import ใน Eclipse หรือ Android Studio
การติดตั้งสามารถดาวน์โหลดไฟล์ .JAR แล้วนำไป Import ลงใน Eclipse หรือ Android Studio
สำหรับตัวอย่างและ Code นี้รองรับการเขียนทั้งบนโปรแกรม Eclipse และ Android Studio
- การอ่าน JSON แบบง่าย ๆ
JSON Code
Java Code
String json = "{\"sName\":\"Sawatdee : Weerachai Nukitram\",\"sEmail\":\"Sawatdee : [email protected]\"}";
JsonObject result = new JsonParser().parse(json).getAsJsonObject();
String strResultName = result.get("sName").getAsString();
String strResultEmail = result.get("sEmail").getAsString();
การอ่านค่า JSON ที่มาจากข้อมูล Object หรือ ชุดเดียว
- การอ่าน JSON ที่ที่ Array แบบ 2 มิติ
JSON Code
[{
"MemberID":"1",
"Name":"Weerachai",
"Tel":"0819876107"
},
{
"MemberID":"2",
"Name":"Win",
"Tel":"021978032"
},
{
"MemberID":"3",
"Name":"Eak",
"Tel":"087654321"
}]
Java Code
String json = "[{\"MemberID\":\"1\",\"Name\":\"Weerachai\",\"Tel\":\"0819876107\"}" +
",{\"MemberID\":\"2\",\"Name\":\"Win\",\"Tel\":\"021978032\"}" +
",{\"MemberID\":\"3\",\"Name\":\"Eak\",\"Tel\":\"0876543210\"}]";
JsonArray result = (JsonArray) new JsonParser().parse(json);
for (int i = 0; i < result.size(); i++) {
JsonElement elem = result.get(i);
JsonObject obj = elem.getAsJsonObject();
HashMap<String, String> map = new HashMap<String, String>();
map.put("MemberID", obj.get("MemberID").getAsString());
map.put("Name", obj.get("Name").getAsString());
map.put("Tel", obj.get("Tel").getAsString());
MyArrList.add(map);
}
การอ่าน JSON ที่มีค่าแบบ Array 2 มิติจะใช้ ArrayList และ HashMap เข้ามาเก็บค่า Index และ Key
สามารถสร้างเป็น List เพื่อ Mapping กับ List<T> ได้เช่นเดียวกัน
Java Code
public static class MyMebmer {
public String MemberID;
public String Name;
public String Tel;
}
Java Code
String json = "[{\"MemberID\":\"1\",\"Name\":\"Weerachai\",\"Tel\":\"0819876107\"}"
+ ",{\"MemberID\":\"2\",\"Name\":\"Win\",\"Tel\":\"021978032\"}"
+ ",{\"MemberID\":\"3\",\"Name\":\"Eak\",\"Tel\":\"0876543210\"}]";
Type listType = new TypeToken<List<MyMebmer>>() {}.getType();
List<MyMebmer> ls = new Gson().fromJson(json, listType);
// Loop for Display
for (MyMebmer val : ls) {
System.out.println(val.MemberID);
System.out.println(val.Name);
System.out.println(val.Tel);
}
- การสร้าง JSON Code ผ่าน Java Android แบบง่าย ๆ
Java Code
Gson gson = new Gson();
JsonObject object = new JsonObject();
object.addProperty("MemberID","1");
object.addProperty("Name","Weerachai");
object.addProperty("Tel","0819876107");
String json = gson.toJson(object);
JSON Code
{"MemberID":"1","Name":"Weerachai","Tel":"0819876107"}
- การสร้าง JSON Code แบบ Array 2 มิติ
Java Code
Gson gson = new Gson();
ArrayList<JsonObject> MyArrJson = new ArrayList<JsonObject >();
JsonObject object;
/*** Rows 1 ***/
object = new JsonObject();
object.addProperty("MemberID","1");
object.addProperty("Name", "Weerachai");
object.addProperty("Tel", "0819876107");
MyArrJson.add(object);
/*** Rows 2 ***/
object = new JsonObject();
object.addProperty("MemberID","2");
object.addProperty("Name", "Win");
object.addProperty("Tel", "021978032");
MyArrJson.add(object);
/*** Rows 3 ***/
object = new JsonObject();
object.addProperty("MemberID","3");
object.addProperty("Name", "Eak");
object.addProperty("Tel", "0876543210");
MyArrJson.add(object);
String json = gson.toJson(MyArrJson);
JSON Code
[{
"MemberID":"1",
"Name":"Weerachai",
"Tel":"0819876107"
},
{
"MemberID":"2",
"Name":"Win",
"Tel":"021978032"
},
{
"MemberID":"3",
"Name":"Eak",
"Tel":"087654321"
}]
.
|