默默發現原來 Json 有這樣多內容可以分享,昨天只有談到 JSONObject 的建立,今天就繼續接續著來看看如何操作 JSONObject。
昨天有提到利用 put(key, value) 可以新增元素到 JSONObject。那如果要修改 value 的話,也可以透過 put( ) 指定同一個 key 就可以修改。
JSONObject object = new JSONObject();
// 新增元素
object.put("name", "Leon");
object.put("age", 18);
object.put("isSingle", true);
System.out.println(object);
//{"isSingle":true,"name":"Leon","age":18}
// 修改 Value
object.put("isSingle", false);
System.out.println(object);
//{"isSingle":false,"name":"Leon","age":18}
使用 get(key)
可以直接用 get(key) 取得值,但所得到的返回值其資料型別皆會是物件(Object)
使用 get<DataType>(key)
若要取得符合初始設定資料型別的值,要使用 get<DataType>(key) 來取得值。舉例如下:
// get(key)
String myName = object.get("name"); // 錯誤
// incompatible types: java.lang.Object cannot be converted to java.lang.String
// 以 get(key) 取得的值型別默認為 Object,需要再手動指派符合的資料型別
String myName = (String) object.get("name");
// get<DataType>(key)
// 直接取得指定型別的值
String myName = object.getString("name");
int myAge =object.getInt("age");
boolean single = object.getBoolean("isSingle");
使用 opt<DataType>(key, default)
使用 get( ) 的時候,如果沒有該 key 值或是型別錯誤的話,會報出 JSONException。
String myWife = object.getString("wife");
// org.json.JSONException: JSONObject["wife"] not found.
int myName = object.getInt("name");
// JSONObject["name"] is not a int (class java.lang.String : Leon).
如果想避免報出 JSONException,opt<DataType>(key, default) 提供了一種方法在取不到值時,自動回傳 default 值的方法,可避免報錯。
// object 沒有 wife 這個 key 值,自動回傳 default
String myWife = object.optString("wife","nobody");
System.out.println(myWife);
// Out: nobody
使用 remove(key) 直接刪除不要的元素。
object.remove("age");
System.out.println(object);
//Out: {"isSingle":true,"name":"Leon"}
除了 JSONObject 之外,另外還有 JSONArray 物件也是很常會應用到,JSONArray 比較接近 ArrayList ,兩者皆是有序且可以動態擴展的陣列,主要差別在於 JSONArray 中的元素可以不需要統一型別。
以 put( ) 建立 JSONArray
// 建立新 JSONArray
JSONArray demoArray = new JSONArray();
demoArray.put(20230927);
demoArray.put("follow");
demoArray.put(1, object);
System.out.println(demoArray);
// Out: [20230927,"follow", {"isSingle":true,"name":"Leon"]
以 Array, ArrayList 建立 JSONArray
ArrayList<String> citys = new ArrayList<>();
citys.add("Taipei");
citys.add("Taichung");
citys.add("Kaohsiung");
// 以 ArrayList 當作參數建立 JSONArray
JSONArray cityArray = new JSONArray(citys);
System.out.println(cityArray);
// Out: ["Taipei","Taichung","Kaohsiung"]
以 Json 字串建立 JSONArray
// 以 Json 字串建立 JSONArray
JSONArray citys = new JSONArray("[\"Taipei\",\"Taichung\",\"Kaohsiung\"]");
System.out.println(citys);
// Out: ["Taipei","Taichung","Kaohsiung"]
JSONArray 要取得元素是使用 get(index),可依照 index 來取對應的值。
System.out.println(citys.get(0));
// Out: Taipei
可以使用 put(index, value) 可以指定插入的位置,如果原本位置已有元素則會覆蓋。
System.out.println(citys);
// Out: ["Taipei","Taichung","Kaohsiung"]
// 取代原有元素
citys.put(0, "New Taipei");
System.out.println(citys);
// Out: ["New Taipei","Taichung","Kaohsiung"]
// 插入的位置可以超過 JSONArray 長度,如果中間 index 沒有值會預設為 null
citys.put(4, "Taipei");
System.out.println(citys);
// Out: ["New Taipei","Taichung","Kaohsiung",null,"Taipei"]