iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
自我挑戰組

轉職仔自學Java筆記本系列 第 11

Java 中的 Json

  • 分享至 

  • xImage
  •  

什麼是 JSON

JSON 全名為 JavaScript Object Notation,它的語法是參考 JavaScript 的對象 (Object),但並不表示只能用於 JavaScript 中。

基於以下幾點特性,再加上 JavaScript 為網頁上使用的主流語言,讓 JSON 變得十分的流行,經常用於在伺服器端與客戶端的檔案交換上:

  • 輕量化:產出的 JSON 檔案佔用容量小。
  • 可讀性高:方便視覺化呈現資料樹狀資料,使人容易閱讀。
  • 基於文本操作:可以直接用文字編輯器開啟並操作,像是使用 TXT。
  • 穩定性佳:格式穩定不會改動。

JSON 語法規則

Json 的格式與 Python 的 dict 以及 Java 的 HashMap 接近,都是儲存 Key-Values pairs 資料的型別,需要注意的規則如下:

  • 以 { } 表示,內部同層數據間以逗號( , ) 間隔,Key-Values 間以冒號 ( : ) 間隔
  • JSON 中只能使用雙引號 ( “ )
  • Key 值必須為字串 String,且不可以為 null
  • Values 值可以為任何數字類型別、字串 String、布林值 Boolean、陣列 Array、物件 Object 或 null

JAVA 中 使用 JSON

Java 並沒有內建解析 Json 的套件,需要導入第三方的套件才可以解析並操作 Json。

關於 Json 物件基本的查詢與增刪改,不同的套件都差不多,所以以下會採用JSON in Java (org.json)這個套件作分享。

安裝 org.json

org.json 下載與說明:

https://github.com/stleary/JSON-java

如果以 Maven 建立的專案,可以於 pom.xml 添加以下依賴項即可。

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20230227</version>
</dependency>

別忘記在 Class 中引用 org.json

import org.json.JSONObject;

建立 JSONObject

  1. 以 put( ) 建立 JSONObject

    // 宣告一個全新的 JSONObject
    JSONObject me = new JSONObject();
    
    // 以 put(key, value) 新增 JSONObject 的元素
    me.put("name", "Leo");
    me.put("age", "25");
    me.put("gender", "man");
    me.put("city", "Taipei");
    
    System.out.println(me);
    // Out:
    // {"gender":"man","city":"Taipei","name":"Leo","age":"25"}
    
  2. 以 HashMap 建立 JSONObject

    // 建立 HashMap
    HashMap<String, String> myMap = new HashMap<>();
    myMap.put("name", "Leo");
    myMap.put("age", "25");
    myMap.put("gender", "man");
    myMap.put("city", "Taipei");
    
    // 將 HashMap 物件當作參數輸入,建立 JSONObject
    JSONObject me = new JSONObject(myMap);
    
    System.out.println(me);
    // Out:
    // {"gender":"man","city":"Taipei","name":"Leo","age":"25"}
    
  3. 以 Json 字串建立 JSONObject

    // 可以輸入符合 Json 格式之字串來建立 JSONObject
    JSONObject me = new JSONObject(
    
    "{\"city\":\"Taipei\",\"name\":\"Leo\",\"age\":\"25\",\"gender\":\"man\"}"
    
    );
    
    System.out.println(me);
    
  4. 以 JavaBean(Java Class) 建立 JSONObject

    首先先建立一個 me 的 Java Class,並在 Class 中建立了 setter 與 getter 的方法,要使用 Java Class 建立 JSONObject,一定要在 Class 設置 getter,這樣 Class 內的參數才可以被訪問。

    // 建立帶有 name, age, gender, city 的 class
    public class Me {
    
        private String name;
        private int age;
        private String gender;
        private String city;
    
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getGender() {
            return gender;
        }
        public void setGender(String gender) {
            this.gender = gender;
        }
        public String getCity() {
            return city;
        }
        public void setCity(String city) {
            this.city = city;
        }
    }
    

    以類別 Me 建立 me 物件,並當作參數傳入建立 JSONObject,這也是實務上蠻常使用的方式。

    Me me = new Me();
    me.setName("Leo");
    me.setAge(26);
    me.setCity("Taipei");
    me.setGender("man");
    
    JSONObject meJson = new JSONObject(me);
    System.out.println(meJson);
    // Out
    //{"gender":"man","city":"Taipei","name":"lorem ipsum","age":26}
    

    部分套件像是 JacksonGson,它提供一些實用的標記方法,來幫助調整 JSON 的欄位。讓回應的資料與資料庫文件的 Java 類別有所區隔,之後再來整理分享。


上一篇
Java的雜湊表 (HashMap)
下一篇
Java 中的 Json(2)
系列文
轉職仔自學Java筆記本22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言