Loading Now

Xử lý JSON Trong Java Với GSON Như Thế Nào?

Có bao giờ trong những dòng code tấp nập bạn vô tình bập vào một chuỗi JSON ?
Xin chào các bạn hôm nay mình sẽ chia sẻ hướng dẫn “Xử lý JSON trong java với GSON” ,nhưng trước khi bắt đầu bài viết mình sẽ giới thiệu qua với các bạn một số loại dùng để biểu diễn và trao đổi dữ liệu thường dùng giống với JSON.

1. Các dạng biểu diễn dữ liệu thường dùng:

YAML:(YAML Ain’t Markup Language) là một chuẩn dữ liệu kiểu serialization và được sử dụng để biểu diễn dữ liệu dưới dạng text. Nó được sử dụng phổ biến để tạo ra các file config cho nhiều ứng dụng.

// Ví dụ về YAML
Employee:  //định nghĩa 1 đối tượng
    Emp_Name:   Robert //  dữ liệu key-value
    Emp_Gen :   No1332​
    Emp_dept:   Developement​
    Emp_age :   25​
    Emp_Pos :   Staff​
Các bạn có thể thấy ví dụ phía trên các đối tượng con sẽ thụt đầu giống so với phần tử cha và gồm 2 phần tử khóa vào giá trị.

XML: ( eXtensible Markup Language, tức “Ngôn ngữ đánh dấu mở rộng”) là ngôn ngữ đánh dấu mở rộng do W3C đề nghị. Và dĩ nhiên nó được dùng nhiều cho việc trao đổi và biểu diễn dữ liệu giữa các hệ thống.

// Ví dụ về XML
<Emplyoee> // Thẻ mở bắt đầu phần tử đối tượng(Element Object)
  <Emp_Name>33947</Emp_Name>  // thành phần con của đối tượng <Key> Value </key>
  <Emp_Gen>SEC_137438957044</Emp_Gen>
  <Emp_dept>Developement</Emp_dept>
  <Emp_age>25</Emp_age>
  <Emp_Pos>Staff</Emp_Pos>
</Emplyoee> // thẻ đóng của phần tử đối tượng
Như ví dụ trên các dịnh dạng xml thường theo một cấu trúc chuẩn gồm một thẻ mở và một thẻ đóng. các giá trị thường nằm giữa thẻ mở và thẻ đóng.

JSON:(Java Script Object Notation) là một dạng tiêu chuẩn mở dùng để trao đổi dữ liệu kiểu văn bản có cấu trúc. Gồm 2 cặp thẻ là Khóa (Key) và giá trị (Value) được ngăn cách bằng dấu “:” .Thỉnh thoảng trong giá trị của chúng có thể là một mảng (Json Array), hoặc một đối tượng (Json Objec

// Ví dụ về JSON
{  //định nghĩa 1 đối tượng (JSON Object)
    "Emp_Name":   "Robert", //  dữ liệu key-value
    "Emp_Gen" :   "No1332​",
    "Emp_dept":   "Developement",​// dấu "," được dùng để ngăn cách cách giá trị
    "Emp_age" :   "25​",
    "Emp_Pos" :   "Staff​",
    "Emp_colleague" : ["Lina","Tom","Thomas"] // Định nghĩa một mảng (JSON ARRAY)
}

Phần ví dụ trên thể hiện một chuỗi JSON được bao lại bởi dấu ngoặc nhọn {} bên trong chứa các khóa và giá trị, và một JSON array.

=> Như vậy mình đã giới thiệu qua về 3 loại thường dùng để biểu diễn và trao đổi thường dùng trong lập trình. Ở những bài khác mình sẽ giới thiệu cũng như có ví dụ cụ thể về XML và YAML sau, còn bây giờ mình sẽ tập trung vào phần chính “giới thiệu về JSON và cách xử lý JSON trong java với GSON” nhé.

 2. Các kiểu dữ liệu trong JSON

Trong JSON chúng ta thường gặp 3 kiểu phổ biến nhất đó là: Object, Array và nest Objet.

  • Kiểu Object:
    // Kiểu JSON Object
    { 
        "Emp_Name":   "Robert",
        "Emp_Gen" :   "No1332​",
        "Emp_dept":   "Developement",​
        "Emp_age" :   "25​",
        "Emp_Pos" :   "Staff​"
    }
  • Kiểu Array:
    [ // dấu ngoặc vuông bắt đầu của mảng
      { 
        "Emp_Name":   "Robert",
        "Emp_Gen" :   "No1332​",
        "Emp_dept":   "Developement",​
        "Emp_age" :   "25​",
        "Emp_Pos" :   "Staff​"
      },
      { 
        "Emp_Name":   "Robert",
        "Emp_Gen" :   "No1332​",
        "Emp_dept":   "Developement",​
        "Emp_age" :   "25​",
        "Emp_Pos" :   "Staff​"
      }
    ]
  • Kiểu nest Object:
    {
      "Emplyoee" :{ 
        "Emp_Name":   "Robert",
        "Emp_Gen" :   "No1332​",
        "Emp_dept":   "Developement",​
        "Emp_age" :   "25​",
        "Emp_Pos" :   "Staff​"
      },
      "DeptPart":{ 
        "Part_Name":   "Developemet Part",
        "Part_No" :   "1234​"
      }
    }

3. Phân tích dữ liệu JSON trong java (Sử dụng thư viện Gson)

Sau khi tìm hiểu về JSON chúng ta bắt tay vào phân tích dữ liêu trong java

Cách bước thêm cần chuẩn bị:


   1.Thêm thư viện Gson vào trong Project Java (Bạn có thể tải tại đây)

      Gson là một thư viện hỗ trợ xử lý JSON phổ biến trong java: nó có thể giúp bạn chuyển đổi một object hay một mảng trở thành JSON một cách dễ dàng mà không cần nhiều thao tác.

   2. Sau khi đã tiến hành thêm dữ liệu chúng ta tiến hành code:

     + Tạo project java name: Codelearn trên Netbean hoặc Eclipse

     + Tạo file class : JsonDemo và code như phía dưới

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package codelearn;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;
import java.util.List;


/**
 *
 * @author toan
 */
public class JsonDemo {
   public static void main(String[] args) {
      String json ="{"
              + "\"Emp_Name\":\"Robert\""
              + ",\"Emp_Gen\":\"No1332\""
              + ",\"Emp_dept\":\"Developement\""
              + ",\"Emp_age\":\"25\""
              + ",\"Emp_Pos\":\"Staff\""
              + ",\"Emp_colleague\":[\"Lina\",\"Tom\",\"Thomas\"]"
              + "}";
       // Cách 1 chuyển đổi json thành object
       Gson gson = new Gson(); // khởi tạo Gson  
       Employee employee = gson.fromJson(json, Employee.class); // parse Gson về object
       System.out.println("Emp_Name:"+ employee.emp_Name);
       System.out.println("Emp_Gen:"+ employee.emp_Gen);
       System.out.println("Emp_age:"+ employee.emp_age);
       System.out.println("Emp_Pos:"+ employee.emp_Pos);
       System.out.println("Emp_dept:"+ employee.emp_dept);
       System.out.println("Emp_colleague:"+ employee.emp_colleague.toString());
//        // cách 2: không chuyển đổi json thành object mà parse trực tiếp
//       JsonObject jsonObject =JsonParser.parseString(json).getAsJsonObject();// Nếu bạn không muốn chuyển thành object có thể sử dụng
//       JsonArray jsonArray = (JsonArray) jsonObject.get("Emp_colleague");
//       System.out.println("Emp_Name:"+ jsonObject.get("Emp_Name"));
//       System.out.println("Emp_Gen:"+ jsonObject.get("Emp_Gen"));
//       System.out.println("Emp_age:"+ jsonObject.get("Emp_age"));
//       System.out.println("Emp_Pos:"+ jsonObject.get("Emp_Pos"));
//       System.out.println("Emp_dept:"+ jsonObject.get("Emp_dept"));
//       System.out.println("Emp_colleague:"+ jsonObject.get("Emp_colleague").toString());
      
   }
   public class Employee
    {
        @SerializedName("Emp_Name") // SerializedName giống với Key của Json
        public String emp_Name;
        @SerializedName("Emp_Gen")
        public String emp_Gen;
        @SerializedName("Emp_dept")
        public String emp_dept;
        @SerializedName("Emp_age")
        public String emp_age;
        @SerializedName("Emp_Pos")
        public String emp_Pos;
        @SerializedName("Emp_colleague")
        public List<String> emp_colleague;
    }   
}

Mình sử dụng 2 cách để parse JSON và có chú thích cụ thể:

Cách 1: tạo object Employee có cấu trúc giống hệt với cấu trúc JSON gồm các @SerializedName(“Emp_Name”) là Key

Cách 2: mình chuyển đổi JSON thành JsonObject  mà không cần phải tạo một Object cho nó, lấy từng giá trị của JSON dựa vào Key  jsonObject.get(“Emp_Name”).

4. Kết Luận

Vậy là xong qua bài viết này mình đã giới thiệu tới các bạn biết sơ qua về XML,YAML,JSON và cách parse JSON sử dụng thư viện GSON một cách đơn giản mà không cần tốn quá nhiều công sức. Có thể mình sẽ có một bài hướng dẫn parse XML,YAML thông qua một ứng dụng cụ thể trên Android hoặc Java. 

Post Comment

Contact