สอนใช้งาน JSON บน Android

ปัจจุบันการทำแอปพลิเคชันส่วนใหญ่แล้วจะมีการดึงข้อมูลต่างๆจาก Web Service ซึ่งในการรับส่งข้อมูลจะมีการกำหนด Protocol ขึ้น
โดยส่วนมากจะใช้ JSON/XML ในการสื่อสาร วันนี้เราจะสอนวิธีการรับส่งข้อมูลด้วย JSON บน Android

ส่วนประกอบของ JSON

1.Object จะใช้สัญลักษณ์ { } ซึ่งในแต่ละ Object จะประกอบด้วยข้อมูล 2 ส่วน คั่นด้วยสัญลักษณ์ :

1.1 Key ใช้สำหรับดึงค่าจาก Value

1.2 Value นำไปใช้แสดงผลต่อในแอปพลิเคชัน ซึ่ง Value มี 3 ประเภทหลัก

– ข้อมูลพื้นฐานต่างๆเช่น String, int, double, float เช่น { “name” : “Growthd” } สีที่ Highlight คือ Value ที่เป็น String

– Object เช่น { “data” : { “name” : “admin”, “gender” : “male” } } สีที่ Highlight คือ Value ที่เป็น Object

– Array ของ Object เช่น { “data” : [ {“name” : “admin 1”}, {“name” : “admin 2”} ] } สีที่ Highlight คือ Value ที่เป็น Array ของ Object

2.Array จะใช้สัญลักษณ์ [ ] ซึ่งข้อมูลใน Array จะประกอบด้วย Object อีกที

 

คำสั่งหลักๆที่ใช้งาน

1.JSONObject ใช้สำหรับดึง Value จาก Object

2.JSONArray ใช้สำหรับดึงข้อมูลที่อยู่ในรูป Array

 

ตัวอย่างการดึงข้อมูล
String json = 
"{" +
   "\"message\" : \"success\"," +
   "\"data\" : " +
       "{" +
       "\"project_name\" : \"Growthd\"," +
       "\"project_detail\" : \"Freelance\"," +
       "\"collaborator\" : " +
           "[" +
                "{" +
                    "\"name\" : \"Bulakorn Suwanmalai\"," +
                    "\"position\" : \"Mobile Developer\"" +
                 "}," +
                 "{" +
                    "\"name\" : \"Gittitat Sanugul\"," +
                    "\"position\" : \"Web Developer\"" +
                 "}" +
            "]" +
       "}" +
"}";

 

try {
    JSONObject object = new JSONObject(json);
    String message = object.getString("message"); // success
    JSONObject data = object.getJSONObject("data"); // data object
    String projectName = data.getString("project_name"); // Growthd
    String projectDetail = data.getString("project_detail"); // Freelance
    JSONArray collaboratorArray = data.getJSONArray("collaborator"); // collaboratorArray
    for (int i = 0; i < collaboratorArray.length(); i++) {
        JSONObject collaboratorObject = collaboratorArray.getJSONObject(i); // get collaborator JSON at index
        collaboratorObject.getString("name"); // Bulakorn Suwanmalai, Gittitat Sanugul
        collaboratorObject.getString("position"); // Mobile Developer, Web Developer
    }
} catch (JSONException e) {
    e.printStackTrace();
}

 

หลังจากเราได้ข้อมูลแล้วเราจะสร้าง Object ไว้เก็บข้อมูลต่างๆลงไปอีกที

public class Collaborator {
    private String name;
    private String position;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPosition() {
        return position;
    }

    public void setPosition(String position) {
        this.position = position;
    }
}

 

public class Project {
    private String name;
    private String detail;
    private List<Collaborator> collaboratorList;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDetail() {
        return detail;
    }

    public void setDetail(String detail) {
        this.detail = detail;
    }

    public List<Collaborator> getCollaboratorList() {
        return collaboratorList;
    }

    public void setCollaboratorList(List<Collaborator> collaboratorList) {
        this.collaboratorList = collaboratorList;
    }
}

 

จากนั้นเราก็กำหนดค่าต่างๆตอนที่จัดการข้อมูล JSON ดังนี้

try {
    Project project = new Project();
    List<Collaborator> collaboratorList = new ArrayList<>();
    JSONObject object = new JSONObject(json);
    String message = object.getString("message"); // success
    JSONObject data = object.getJSONObject("data"); // data object
    String projectName = data.getString("project_name"); // Growthd
    String projectDetail = data.getString("project_detail"); // Freelance
    JSONArray collaboratorArray = data.getJSONArray("collaborator"); // collaboratorArray

    project.setName(projectName);
    project.setDetail(projectDetail);
    for (int i = 0; i < collaboratorArray.length(); i++) {
        JSONObject collaboratorObject = collaboratorArray.getJSONObject(i); // get collaborator JSON at index
        String name = collaboratorObject.getString("name"); // Bulakorn Suwanmalai, Gittitat Sanugul
        String position = collaboratorObject.getString("position"); // Mobile Developer, Web Developer

        Collaborator collaborator = new Collaborator();
        collaborator.setName(name);
        collaborator.setPosition(position);
        collaboratorList.add(collaborator);
    }

    project.setCollaboratorList(collaboratorList);
} catch (JSONException e) {
    e.printStackTrace();
}

 

วิธีการดึงข้อมูล

1.เมื่อไรที่ Value เราเป็น Object ( ดูที่ตัวครอบใช้สัญลักษณ์ { } ) เราจะรับค่าด้วย JSONObject

2.เมื่อไรที่ Value เราเป็น Array (ดูที่ตัวครอบใช้สัญลักษณ์ [ ] ) เราจะรับค่าด้วย JSONArray

3.เราใช้ Key ในการดึง Value สำหรับ JSONObject

4.เราใช้การวน for loop เพื่อดึงข้อมูลที่อยู่ใน Array 

5.เมื่อได้ค่าของตัวแปรแล้ว เราจะเก็บค่าลง Object ที่สร้างไว้

6.นำ Object ที่สร้างไว้มาใช้งานต่อ

ที่จริงเรามีวิธีการแปลง JSON แล้วเก็บลง Object ให้อย่างง่ายดาย ผ่าน GSON 

นักพัฒนาสามารถอ่านรายละเอียดเพิ่มเติมได้ จากบทความนี้ครับ “รู้จักกับ Gson Library Android”

สรุป

เราแปลงข้อมูล JSON จาก Web Service มาเก็บลง Object แล้วนำมาใช้งานต่อ

โดยวิธีการแปลง JSON ใช้คำสั่งหลักๆเพียง 2 อย่างเท่านั้น !!

หวังว่าจะเป็นประโยชน์สำหรับนักพัฒนามือใหม่นะครับ