| JSONObject |
|---|
| org.json.JSONObject |
| 用來操作 JSON 物件的類別 |
|
JSONObject官方文件 |
| get 系列函式 |
|---|
| 以 keyname 從 JSONObject 取出對應 value |
| org.json.JSONObject.get |
|
Object get(String keyname) String getString(String keyname) int getInt(String keyname) boolean getBoolean(String keyname) long getLong(String keyname) double getDouble(String keyname) JSONArray getJSONArray(String keyname) JSONObject JSONObject.getJSONObject(String keyname) |
| 傳入 keyname,回傳 value |
| 當 keyname不存在時,會丟出 JSONException |
| 單純的取用 json 內容 |
|---|
|
JSON 內容 { "Title":"His Dark Materials", "Number":3, "Fun":true, "Empty":null } |
|
try { JSONObject objRoot = new JSONObject(jsonString); //從字串建立 JSONObject objRoot.get("Title") //得到 Object , 內容為 "His Dark Materials" (String) objRoot.getString("Title") //得到 String, 內容為 "His Dark Materials" objRoot.getInt("Number") //得到 int , 內容為 3 objRoot.getBoolean("Fun") //得到 boolean, 內容為 true objRoot.get("Empty") //得到 null objRoot.get("Nokey") //會丟出 Exception: "No Value for Nokey" }catch (JSONException ex) { Debug.log(ex); } |
| 會在錯誤時丟出 JSONException,所以要用 try-catch 包起來 |
|
以 get() 取值, 再以 instanceof 判斷資料型別後各別處理 |
|---|
|
Object val = objRoot.get(who); if (val.equals(null)) { log(key + " is null"); } else if (val instanceof String) { log(key + "=" + (String) val ); } else if (val instanceof Integer) { log(key + "=" + ((Integer) val).toString() ); } else if (val instanceof Boolean) { log(key + "=" + ((Boolean) val).toString() ); } else if (val instanceof JSONObject) { log(key + " is JSONObject"); } else if (val instanceof JSONArray) { log(key + " is JSONArray"); } |
當 key 不存在,使用get會丟出 exception
可改用 opt() 避免之
| opt 系列函式 |
|---|
|
以 keyname 從 JSONObject 取出對應 value 但,不會 在keyname 不存在時丟出 JSONException |
| org.json.JSONObject.opt |
|
Object opt (String keyname) String optString (String keyname) int optInt (String keyname) boolean optBoolean (String keyname) double optDouble (String keyname) JSONArray optJSONArray (String keyname) JSONObject optJSONObject (String keyname) |
| 傳入 keyname,回傳 value |
|
當 keyname 不存在 optString 會傳回空字串 optInt 會傳回 0 optBoolean 會傳回 false optLong 會傳回 0 optDouble 會傳回 NaN opt 會傳回 null optJSONArray 會傳回 null optJSONObject 會傳回 null |
| opt 系列函式 + fallback |
|---|
|
以 keyname 從 JSONObject 取出對應 value 當取 value 失敗時,回傳設定好的 fallback |
|
String optString (String keyname, String fallback) boolean optBoolean (String keyname, boolean fallback) double optDouble (String keyname, double fallback) int optInt (String keyname, int fallback) long optLong (String keyname, long fallback) |
| 傳入 keyname,以及 keyname 不在時的回傳值- fallback |
|
當 key 存在,會回傳value 當 key 不存在,則會傳回 設定的 fallback |
| opt 使用範例 |
|---|
|
JSON 內容 { "Title":"His Dark Materials", "Number":3, "Fun":true } |
|
objRoot.opt("Title") //得到 "His Dark Materials" (String) objRoot.opt("Nokey") //用 opt 讀取一個不存在的 key 值,將會得到 null objRoot.optSting("Nokey","Nothing") //用 optSting() 讀取一個不存在的 key 值 //並設定 key值不存在時傳回 "Nothing" //將會得到 "Nothing" |
為了防止 key 不存在,也可以先確認 key 是否存在
| has 函式 |
|---|
| 檢查 keyname 是否存在 |
| org.json.JSONObject.has |
| boolean has(String keyname) |
| 傳入 keyname, 回傳 keyname 是存在否 |
| 用 has() 防止key值不存在 |
|---|
|
if ( ! objRoot.has("Nokey")) { Debug.log("Nokey 不存在"); } else { val = objRoot.get("Nokey"); Debug.log("get(Nokey) =" + val.toString()); } |