Java

Sử dụng JSON trong lập trình Java

json trong java, làm việc với json trong java, sử dụng json

Chúng ta đã cùng tìm hiểu về JSON ở bài trước.

Trong bài số này, tôi sẽ hướng dẫn bạn thao tác với JSON trong ngôn ngữ lập trình Java, bài này gồm 2 phần:

  1. Mô tả đối tượng bằng JSON.
  2. Phân tích chuỗi JSON (JSON String) thành đối tượng.

Hiện nay có rất nhiều thư viện hỗ trợ chúng ta làm việc với JSON trên Java, như Json.simpleGson,… Dưới dây là bảng so sánh hiệu năng của một số thư viện tiêu biểu:

Trong bài này tôi sử dụng thư viện Json.simple, vì cũng như cái tên của nó, sử dụng Json.simple rất đơn giản và hiệu năng cũng không hề tồi.

Chuẩn bị đồ nghề bắt tay vào viết code:

I. Mô tả đối tượng bằng JSON

Gồm 2 phần con:

  • Mô tả đối tượng
  • Mô tả một tập đối tượng (List)

1) Mô tả đối tượng

Vấn đề đặt ra: Tôi có một đối tượng Student, với các thuộc tính: id, name, email. Hãy mô tả đối tượng này bằng JSON.

Trước tiên hãy xem kết quả sau khi một đối tượng Student được mô tả bằng JSON:

{
    "id": "1",
    "name": "Duy hung",
    "email": "duyhung.ws@gmail.com"
}

Tip: Để kiểm tra chuỗi JSON có đúng cú pháp hay không, bạn vào trang http://jsonlint.com/

Chúng ta cùng viết code Java để sinh ra được đoạn JSON như trên.

Lưu ý: Sau khi tạo Project, bạn cần add thêm thư viện JSON.simple vừa tải về vào Project.

+ Đối tượng Student.
Đối tượng của chúng ta cần implements inteface JSONAware và @Override lại phương thứctoJSONString(). Khi đó, JSON.simple sẽ dùng phương thức này để tạo ra chuỗi JSON mô tả đối tượng.

package com.blogspot.code4lifevn.json;

import org.json.simple.JSONAware;

public class Student implements JSONAware {

    private int id;
    private String name;
    private String email;

    public Student() {

    }

    public Student(int id, String name, String email) {
        super();
        this.id = id;
        this.name = name;
        this.email = email;
    }

    // Các phương thức get và set ...

    // Phần quan trọng nhất: toJSONString()
    @Override
    public String toJSONString() {

        StringBuffer sb = new StringBuffer();

        sb.append("{"); // Bắt đầu một đối tượng JSON là dấu mở ngoặc nhọn

        sb.append("\"id\":\"" + getId() + "\""); // dòng này có nghĩa là
                                                    // "id":"Giá_Trị"
        sb.append(","); // sau mỗi cặp key/value là một dấu phẩy

        sb.append("\"name\":\"" + getName() + "\"");
        sb.append(",");

        sb.append("\"email\":\"" + getEmail() + "\"");

        sb.append("}"); // Kết thúc một đối tượng JSON là dấu đóng ngoặc nhọn

        return sb.toString();

    }

}

+ Tạo chuỗi JSON
Rất đơn giản, chúng ta chỉ cần gọi phương thức toJSONString là có kết quả như ý:

package com.blogspot.code4lifevn.json;

public class Main {
    public static void main(String[] args){

        Student student = new Student(1, "Duy hung", "duyhung.ws@gmail.com");

        String JSONResult = student.toJSONString();

        System.out.println(JSONResult);

    }
}

Kết quả in ra trên Console:

Bạn nên copy ngay và luôn vào http://jsonlint.com để xem đã chuẩn cú pháp hay chưa, thừa hoặc hiểu một dấu phẩy là hỏng luôn.

2. Mô tả một tập đối tượng (List)

Vấn đề mô tả một đối tượng đã được giải quyết, vậy câu hỏi đặt ra là, tôi muốn mô tả một tập các đối tượng thì sao?

Câu trả lời đơn giản không kém phần trên, chúng ta sử dụng JSONArray để tạo ra chuỗi JSON từ một List, bạn xem code hiểu ngay:

package com.blogspot.code4lifevn.json;

public class Main {
    public static void main(String[] args){

        // Khởi tạo list với 3 đối tượng Student
        List<Student> list = new ArrayList<Student>() {
            {
                add(new Student(1, "Duy hung", "duyhung.ws@gmail.com"));
                add(new Student(2, "Do manh", "code4lifevn@gmail.com"));
                add(new Student(3, "Thai trung", "trungvt@gmail.com"));
            }
        };

        // Sử dụng JSONArray
        String JSONResult = JSONArray.toJSONString(list);

        System.out.println(JSONResult);

    }
}

Kết quả:

Format cho dễ nhìn:

[
    {
        "id": "1",
        "name": "Duy hung",
        "email": "duyhung.ws@gmail.com"
    },
    {
        "id": "2",
        "name": "Do manh",
        "email": "code4lifevn@gmail.com"
    },
    {
        "id": "3",
        "name": "Thai trung",
        "email": "trungvt@gmail.com"
    }
]

II. Phân tích chuỗi JSON thành đối tượng

Trong phần này, chúng ta sẽ làm công việc ngược lại ở trên, đó là từ một chuỗi JSON (JSON String), chúng ta phân tích ra thành các đối tượng, cụ thể trong bài này là phân tích về đối tượng Student hoặc một List.

Gồm 2 phần con:

  • Phân tích đối tượng
  • Phân tích một tập đối tượng (List)

1. Phân tích đối tượng

Đầu tiên, để phân tích một chuỗi JSON thì chúng ta cần biết là chuỗi đấy có những cái gì. Xem lại chuỗiJSON mô tả đối tượng Student:

{
    "id": "1",
    "name": "Duy hung",
    "email": "duyhung.ws@gmail.com"
}

Chúng ta thấy, ở đây có 3 từ khóa (Key): id, name, email và 3 giá trị (Value) tương ứng. Công việc của ta là lấy ra 3 giá trị trên để gán vào đối tượng Student.

Cách làm gồm 3 bước:

  1. Tạo đối tượng JSONParser
  2. Parser chuỗi JSON về một JSONObject
  3. Lấy các giá trị trong jsonObject thông qua các Key
package com.blogspot.code4lifevn.json;

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

public class Main {
    public static void main(String[] args) {

        // Chuỗi JSON mẫu mô tả một đối tượng Student
        String jsonString = "{\"id\": \"1\", \"name\": \"Duy hung\", \"email\": \"duyhung.ws@gmail.com\"}";

        // Phân tích
        try {

            // 1. Tạo ra một JSONParser
            JSONParser jsonParser = new JSONParser();

            // 2. Parser chuỗi JSON về một JSONObject
            JSONObject jsonObject = (JSONObject) jsonParser.parse(jsonString);

            // 3. Lấy các giá trị trong jsonObject thông qua các Key
            int id = Integer.parseInt((String) jsonObject.get("id"));
            String name = (String) jsonObject.get("name");
            String email = (String) jsonObject.get("email");

            Student student = new Student(id, name, email);

            System.out.println("ID    : " + student.getId());
            System.out.println("Name  : " + student.getName());
            System.out.println("Email : " + student.getEmail());

        } catch (ParseException e) {
            e.printStackTrace();
        }

    }
}

Kết quả:

2. Phân tích một tập đối tượng

Ở trên chúng ta đã biết cách phân tích một chuỗi JSON về một Object, còn đối với việc mộtList<Object> thì làm thế nào?
Cũng với 3 bước trên: Tạo JSONParser, parse, lấy giá trị, tuy nhiên có khác một chút ở bước 2, thay vì lấy JSONObject, chúng ta sẽ lấy về JSONArray.

Chúng ta sẽ dùng lại chuỗi JSON này,

[
    {
        "id": "1",
        "name": "Duy hung",
        "email": "duyhung.ws@gmail.com"
    },
    {
        "id": "2",
        "name": "Do manh",
        "email": "code4lifevn@gmail.com"
    },
    {
        "id": "3",
        "name": "Thai trung",
        "email": "trungvt@gmail.com"
    }
]

Mã xử lý chính:

package com.blogspot.code4lifevn.json;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

public class Main {
    public static void main(String[] args) {

        // Chuỗi JSON mẫu mô tả một danh sách các đối tượng Student
        String jsonString = "[{\"id\": \"1\", \"name\": \"Duy hung\", \"email\": \"duyhung.ws@gmail.com\"}, {\"id\": \"2\", \"name\": \"Do manh\", \"email\": \"code4lifevn@gmail.com\"}, {\"id\": \"3\", \"name\": \"Thai trung\", \"email\": \"trungvt@gmail.com\"} ]";

        // Phân tích
        try {

            // 1. Tạo ra một JSONParser
            JSONParser jsonParser = new JSONParser();

            // 2. Parser chuỗi JSON về một JSONArray
            JSONArray jsonArray = (JSONArray) jsonParser.parse(jsonString);

            // 3. Lấy các giá trị trong jsonArray bằng cách lặp qa từng phần tử
            for (int i = 0; i < jsonArray.size(); i++) {

                // Mỗi phần tử của JSONArray lại là một JSONObject
                JSONObject jsonObject = (JSONObject) jsonArray.get(i);

                int id = Integer.parseInt((String) jsonObject.get("id"));
                String name = (String) jsonObject.get("name");
                String email = (String) jsonObject.get("email");

                // Gán vào đối tượng và in ra màn hình
                Student student = new Student(id, name, email);
                System.out.println("ID    : " + student.getId());
                System.out.println("Name  : " + student.getName());
                System.out.println("Email : " + student.getEmail());
                System.out.println();
            }

        } catch (ParseException e) {
            e.printStackTrace();
        }

    }
}

Kết quả:



Như vậy là tôi đã hoàn thành xong bài hướng dẫn làm việc với JSON trên Java, nếu có bất kỳ thắc mắc hoặc góp ý, bạn vui lòng comment lại, tôi sẽ trả lời sớm nhất có thể.

Và Tip cuối cùng là thay vì chỉ đọc code và chạy demo, hãy xắn tay áo lên và code thì sẽ hiệu quả hơn rất nhiều đấy.



Xem thêm bài viết: https://edwardthienhoang.wordpress.com/2013/11/26/json-la-gi/

Download sourcecode

 

From http://www.code4life.vn

Advertisements

1 thought on “Sử dụng JSON trong lập trình Java”

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s