您好,登錄后才能下訂單哦!
Android getJSONObject與optJSONObject的區別結合源碼分析
json解析常見問題:
getJSONObject與optJSONObject的區別,下面結合源碼和案例來分析當我們使用這兩周方法來解析數據時,哪種比較好.
源碼分析:
//使用getJSONObject時,如果返回的對象不是JSONObject,拋出JSONException異常 /** * Returns the value mapped by {@code name} if it exists and is a {@code * JSONObject}. * @throws JSONException if the mapping doesn't exist or is not a {@code * JSONObject}. */ public JSONObject getJSONObject(String name) throws JSONException { Object object = get(name); if (object instanceof JSONObject) { return (JSONObject) object; } else { throw JSON.typeMismatch(name, object, "JSONObject"); } } //使用optJSONObject時,當返回結果不是JSONObject時,這里不會拋異常,而是返回null /** * Returns the value mapped by {@code name} if it exists and is a {@code * JSONObject}. Returns null otherwise. */ public JSONObject optJSONObject(String name) { Object object = opt(name); return object instanceof JSONObject ? (JSONObject) object : null; }
結合項目代碼分析使用場景
/** * 偽代碼如下 **/ public class GetGoodsCollectListFactory { private String ERROR_MSG = "errorMsg"; private String ERROR_CODE = "errorCode"; private String RESULT = "result"; /** * 商品列表,解析獲取到的json數據 * * @param param * @return */ public CollectListInfo getGoodsCollectListParse(String param) { String BOOK_MARK_BO_LIST = "favorGoodsList"; CollectListInfo collectList = new CollectListInfo(); List<CollectInfo> list = new ArrayList<CollectInfo>(); ResponseInfo responseInfo = null; CollectInfo info = null; try { // 請求獲取json結果 JSONObject jsonObject = new JSONObject(HttpRequestClient.executeRequest(Constant.Url.GET_FOLLOW_GOODS_URL, param, true)); responseInfo = new ResponseInfo(); if (jsonObject.getBoolean(RESULT)) { responseInfo.setResult(true); JSONArray jsonArray = jsonObject.getJSONArray(BOOK_MARK_BO_LIST); collectList.setTotalPage(jsonObject.getInt(Constant.TOTAL_PAGE_NAME)); for (int i = 0; i < jsonArray.length(); i++) { info = collectList.getCollectInfo(); SONObject object = jsonArray.getJSONObject(i); JSONArray activityItemList = object.optJSONArray("activityItemList"); ArrayList<ActivityCollectInfo> activityCollectInfos = new ArrayList<ActivityCollectInfo>(); //因為object.optJSONArray("activityItemList");如果解析不到會直接返null if (activityItemList != null && activityItemList.size() > 0) { for (int j = 0; j < activityItemList.length(); j++) { //使用optJSONObject(i)會莫名解析不了下面數據:如optString("activityId")); // 當activityid為null時,不會拋錯,但是下面的方法不走,因此換用getJSONObject(i); //JSONObject activityItemobj = activityItemList.optJSONObject(i); JSONObject activityItemobj = activityItemList.getJSONObject(i); ActivityCollectInfo activityCollectInfo = new ActivityCollectInfo(); activityCollectInfo.setActivityId(activityItemobj.optString("activityId")); activityCollectInfo.setActivityName(activityItemobj.optString("activityName")); activityCollectInfo.setActivityType(activityItemobj.optInt("activityType")); activityCollectInfo.setLargessFlag(activityItemobj.optInt("largessFlag")); activityCollectInfo.setLargessMoney(activityItemobj.optInt("largessMoney")); activityCollectInfo.setLargessNumber(activityItemobj.optInt("largessNumber")); activityCollectInfos.add(activityCollectInfo); } ... } }
溫故而知新,可以為師矣.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。