JSON 全名為 JavaScript Object Notation,它的語法是參考 JavaScript 的對象 (Object),但並不表示只能用於 JavaScript 中。
基於以下幾點特性,再加上 JavaScript 為網頁上使用的主流語言,讓 JSON 變得十分的流行,經常用於在伺服器端與客戶端的檔案交換上:
Json 的格式與 Python 的 dict 以及 Java 的 HashMap 接近,都是儲存 Key-Values pairs 資料的型別,需要注意的規則如下:
Java 並沒有內建解析 Json 的套件,需要導入第三方的套件
才可以解析並操作 Json。
關於 Json 物件基本的查詢與增刪改,不同的套件都差不多,所以以下會採用JSON in Java (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;
以 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"}
以 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"}
以 Json 字串建立 JSONObject
// 可以輸入符合 Json 格式之字串來建立 JSONObject
JSONObject me = new JSONObject(
"{\"city\":\"Taipei\",\"name\":\"Leo\",\"age\":\"25\",\"gender\":\"man\"}"
);
System.out.println(me);
以 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}
部分套件像是 Jackson
與 Gson
,它提供一些實用的標記方法,來幫助調整 JSON 的欄位。讓回應的資料與資料庫文件的 Java 類別有所區隔,之後再來整理分享。