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)

