Android getJSONObject與optJSONObject的區(qū)別結(jié)合源碼分析
Android getJSONObject與optJSONObject的區(qū)別結(jié)合源碼分析
json解析常見(jiàn)問(wèn)題:
getJSONObject與optJSONObject的區(qū)別,下面結(jié)合源碼和案例來(lái)分析當(dāng)我們使用這兩周方法來(lái)解析數(shù)據(jù)時(shí),哪種比較好.
源碼分析:
//使用getJSONObject時(shí),如果返回的對(duì)象不是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時(shí),當(dāng)返回結(jié)果不是JSONObject時(shí),這里不會(huì)拋異常,而是返回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; }
結(jié)合項(xiàng)目代碼分析使用場(chǎng)景
/** * 偽代碼如下 **/ public class GetGoodsCollectListFactory { private String ERROR_MSG = "errorMsg"; private String ERROR_CODE = "errorCode"; private String RESULT = "result"; /** * 商品列表,解析獲取到的json數(shù)據(jù) * * @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 { // 請(qǐng)求獲取json結(jié)果 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>(); //因?yàn)閛bject.optJSONArray("activityItemList");如果解析不到會(huì)直接返null if (activityItemList != null && activityItemList.size() > 0) { for (int j = 0; j < activityItemList.length(); j++) { //使用optJSONObject(i)會(huì)莫名解析不了下面數(shù)據(jù):如optString("activityId")); // 當(dāng)activityid為null時(shí),不會(huì)拋錯(cuò),但是下面的方法不走,因此換用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); } ... } }
溫故而知新,可以為師矣.
相關(guān)文章
Android?Scroller實(shí)現(xiàn)彈性滑動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android?Scroller實(shí)現(xiàn)彈性滑動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04android自定義view之實(shí)現(xiàn)日歷界面實(shí)例
本篇文章主要介紹了android自定義view之實(shí)現(xiàn)日歷界面實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03Android開(kāi)發(fā)apk反編譯和二次打包教程
反編譯不是讓各位開(kāi)發(fā)者去對(duì)一個(gè)應(yīng)用破解搞重裝什么的,主要目的是為了促進(jìn)開(kāi)發(fā)者學(xué)習(xí),借鑒好的代碼,提升自我開(kāi)發(fā)水平。下面我們就來(lái)研究下如何進(jìn)行APK反編譯以及二次打包2016-04-04Android自定義控件實(shí)現(xiàn)時(shí)鐘效果
這篇文章主要介紹了Android自定義控件實(shí)現(xiàn)時(shí)鐘效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12Android XmlPullParser 方式解析 Xml 文檔
這篇文章主要介紹了Android XmlPullParser 方式解析 Xml 文檔的相關(guān)資料,需要的朋友可以參考下2017-06-06淺談Android手機(jī)聯(lián)系人開(kāi)發(fā)之增刪查改功能
這篇文章主要介紹了Android手機(jī)聯(lián)系人開(kāi)發(fā)之增刪查改功能,需要的朋友可以參考下2017-05-05Android 給應(yīng)用程序的icon添加未讀消息個(gè)數(shù)提示(紅圈內(nèi)數(shù)字)
本文主要介紹了Android 給應(yīng)用程序的icon添加未讀消息個(gè)數(shù)提示(紅圈內(nèi)數(shù)字)的方法。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04