iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
自我挑戰組

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

Java 中的 Json(2)

  • 分享至 

  • xImage
  •  

默默發現原來 Json 有這樣多內容可以分享,昨天只有談到 JSONObject 的建立,今天就繼續接續著來看看如何操作 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}

訪問元素的值

  1. 使用 get(key)

    可以直接用 get(key) 取得值,但所得到的返回值其資料型別皆會是物件(Object)

  2. 使用 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");
    
    
  3. 使用 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"}

JSONArray

除了 JSONObject 之外,另外還有 JSONArray 物件也是很常會應用到,JSONArray 比較接近 ArrayList ,兩者皆是有序且可以動態擴展的陣列,主要差別在於 JSONArray 中的元素可以不需要統一型別。

建立 JSONArray

  1. 以 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"]
    
  2. 以 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"]
    
  3. 以 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"]
    
    

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

尚未有邦友留言

立即登入留言