Android getJSONObject与optJSONObject的区别结合源码分析

发布时间 - 2026-01-10 23:16:52    点击率:

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  # getJSONObject与optJSONObject区别  # Android SharedPreferences实现记住密码和自动登录界面  # Android自定义ViewPagerIndicator实现炫酷导航栏指示器(ViewPager+F  # Android自定义PopupWindow仿点击弹出分享功能  # Android编程实现VideoView循环播放功能的方法  # Android ksoap调用webservice批量上传多张图片详解  # Android 通过webservice上传多张图片到指定服务器详解  # 温故而知新  # 比较好  # 当我们  # 哪种  # 不走  # 方法来  # 两周  # 抛出  # 为师  # 换用  # private  # GetGoodsCollectListFactory  # ERROR_MSG  # return  # throw  # JSON  # typeMismatch  # null  # br  # opt 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何用AI帮你把自己的生活经历写成一个有趣的故事?  Laravel PHP版本要求一览_Laravel各版本环境要求对照  如何在云虚拟主机上快速搭建个人网站?  php485函数参数是什么意思_php485各参数详细说明【介绍】  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  如何撰写建站申请书?关键要点有哪些?  高端企业智能建站程序:SEO优化与响应式模板定制开发  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  浅谈javascript alert和confirm的美化  Angular 表单中正确绑定输入值以确保提交与验证正常工作  北京网站制作公司哪家好一点,北京租房网站有哪些?  Linux安全能力提升路径_长期防护思维说明【指导】  济南网站建设制作公司,室内设计网站一般都有哪些功能?  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  详解Android图表 MPAndroidChart折线图  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  创业网站制作流程,创业网站可靠吗?  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  零服务器AI建站解决方案:快速部署与云端平台低成本实践  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  韩国服务器如何优化跨境访问实现高效连接?  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  如何快速搭建高效WAP手机网站吸引移动用户?  如何在自有机房高效搭建专业网站?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  简单实现Android验证码  三星、SK海力士获美批准:可向中国出口芯片制造设备  网站优化排名时,需要考虑哪些问题呢?  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  网站制作企业,网站的banner和导航栏是指什么?  如何用景安虚拟主机手机版绑定域名建站?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  iOS验证手机号的正则表达式  Laravel distinct去重查询_Laravel Eloquent去重方法  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  装修招标网站设计制作流程,装修招标流程?  如何为不同团队 ID 动态生成多个“认领值班”按钮  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  Laravel如何升级到最新版本?(升级指南和步骤)  JavaScript如何实现错误处理_try...catch如何捕获异常?  EditPlus 正则表达式 实战(3)