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-04
android自定義view之實(shí)現(xiàn)日歷界面實(shí)例
本篇文章主要介紹了android自定義view之實(shí)現(xiàn)日歷界面實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03
Android開(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-04
Android自定義控件實(shí)現(xiàn)時(shí)鐘效果
這篇文章主要介紹了Android自定義控件實(shí)現(xiàn)時(shí)鐘效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
Android 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-05
Android 給應(yīng)用程序的icon添加未讀消息個(gè)數(shù)提示(紅圈內(nèi)數(shù)字)
本文主要介紹了Android 給應(yīng)用程序的icon添加未讀消息個(gè)數(shù)提示(紅圈內(nèi)數(shù)字)的方法。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04

