Computer >> Máy Tính >  >> Lập trình >> Java

Cách phân tích cú pháp JSON trong Java

Trong hướng dẫn này, chúng ta sẽ xem xét cách phân tích cú pháp JSON trong Java bằng các thư viện khác nhau.

JSON là viết tắt của JavaScript Object Notation, và nó dựa trên một tập hợp con của JavaScript.

Là một định dạng trao đổi dữ liệu, nó được sử dụng rộng rãi trong lập trình web. Sau đây, chúng tôi hướng dẫn cách phân tích cú pháp JSON trong Java bằng cách sử dụng org.json thư viện.

Đối tượng JSON là một tập hợp các cặp khóa / giá trị không có thứ tự. Mảng JSON là một tập hợp các giá trị có thứ tự. Bản thân các giá trị có thể là đối tượng hoặc mảng.

Chúng tôi sẽ phân tích cú pháp JSON này làm ví dụ để truy xuất giá trị cho pageName , pagePicpost_id

{
    "pageInfo": {
            "pageName": "Homepage",
            "logo": "https://www.example.com/logo.jpg"
    },
    "posts": [
            {
                "post_id": "0123456789",
                "actor_id": "1001",
                "author_name": "Jane Doe",
                "post_title": "How to parse JSON in Java",
                "comments": [],
                "time_of_post": "1234567890"
            }
    ]
}

Phân tích cú pháp JSON bằng org.json

Để sử dụng org.json để phân tích cú pháp JSON trong Java, bạn cần thêm thư viện làm phụ thuộc. Điều này có thể được tìm nạp từ kho lưu trữ Maven

import org.json.JSONArray;
import org.json.JSONObject;

public class ParseJSON {
    static String json = "...";
    public static void main(String[] args) {
        JSONObject obj = new JSONObject(json);
        String pageName = obj.getJSONObject("pageInfo").getString("pageName");

        System.out.println(pageName);

        JSONArray arr = obj.getJSONArray("posts");
        for (int i = 0; i < arr.length(); i++) {
            String post_id = arr.getJSONObject(i).getString("post_id");
            System.out.println(post_id);
        }
    }
}

N.B. ... cần được thay thế bằng chuỗi JSON. Điều này đã được bỏ qua trong đoạn mã trên để rõ ràng.

Đầu tiên, chúng ta cần chuyển đổi chuỗi JSON thành một Đối tượng JSON, sử dụng lớp JSONObject.

Ngoài ra, hãy lưu ý rằng “pageInfo” là một Đối tượng JSON, vì vậy chúng tôi sử dụng phương thức getJSONObject.

Tương tự như vậy, “posts” là một mảng JSON, vì vậy chúng ta cần sử dụng phương thức getJSONArray.

Có liên quan:

  • Cách chuyển đổi Đối tượng Java thành JSON
  • Cách chuyển đổi Java Map sang JSON
  • Cách mã hóa và giải mã JSON

Phân tích cú pháp JSON bằng Gson

Để sử dụng Gson để phân tích cú pháp JSON trong Java, bạn cần thêm thư viện làm phụ thuộc. Bạn có thể tải phiên bản mới nhất từ ​​kho lưu trữ Maven

Ví dụ dưới đây cho thấy cách phân tích cú pháp JSON ở trên với Gson.

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class ParseJSON {
    static String json = "...";
    public static void main(String[] args) {
        JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject();

        String pageName = jsonObject.getAsJsonObject("pageInfo").get("pageName").getAsString();
        System.out.println(pageName);

        JsonArray arr = jsonObject.getAsJsonArray("posts");
        for (int i = 0; i < arr.size(); i++) {
            String post_id = arr.get(i).getAsJsonObject().get("post_id").getAsString();
            System.out.println(post_id);
        }
    }
}

Giống như ví dụ trước, ... cần được thay thế bằng chuỗi JSON.

Phân tích cú pháp JSON bằng JsonPATH

Hai ví dụ trên yêu cầu giải mã toàn bộ JSON thành một đối tượng Java trước khi truy cập giá trị trong thuộc tính quan tâm. Một giải pháp thay thế khác, không đi theo lộ trình này là sử dụng JsonPATH giống như XPath cho JSON và cho phép duyệt các đối tượng JSON.

Giống như trước đây, bạn cần thêm JsonPATH làm phụ thuộc, có thể được tìm nạp từ kho lưu trữ Maven

Ví dụ:để phân tích cú pháp JSON ở trên, chúng ta có thể sử dụng:

import com.jayway.jsonpath.JsonPath;

public class ParseJSON {
    static String json = "...";
    public static void main(String[] args) {
        String pageName = JsonPath.read(json, "$.pageInfo.pageName");
        System.out.println(pageName);

        Integer posts = JsonPath.read(json, "$.posts.length()");

        for(int i=0; i < posts; i++) {
            String post_id = JsonPath.read(json, "$.posts[" + i + "].post_id");
            System.out.println(post_id);
        }
    }
}