Android getJSONObject与optJSONObject的区别结合源码分析
程序员文章站
2023-12-14 15:43:52
android getjsonobject与optjsonobject的区别结合源码分析
json解析常见问题:
getjsonobject与optjsonobject...
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); } ... } }
温故而知新,可以为师矣.
推荐阅读
-
Android getJSONObject与optJSONObject的区别结合源码分析
-
Android中gravity与layout_gravity的使用区别分析
-
Android中gravity与layout_gravity的使用区别分析
-
Android、iOS和Windows Phone 三大操作系统的区别与市场分析(图文)
-
HashMap与HashTable的区别(含源码分析)
-
很容易理解的Android AsyncTask源码与工作原理分析
-
UGUI源码分析:Image与RawImage的区别
-
很容易理解的Android AsyncTask源码与工作原理分析
-
Android、iOS和Windows Phone 三大操作系统的区别与市场分析(图文)