json教程系列(4)-optXXX方法的使用
在JSONObject获取value有多种方法,如果key不存在的话,这些方法无一例外的都会抛出异常。如果在线环境抛出异常,就会使出现error页面,影响用户体验,针对这种情况最好是使用optXXX方法。
getString方法会抛出异常,如下所示:
| 1 2 3 4 5 6 7 8 9 10 |  public String getString(String key)     {         verifyIsNull();         Object o = get(key);         if (o != null)         {             return o.toString();         }         throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] not found.");     } | 
getInt方法会抛出异常,如下所示:
| 1 2 3 4 5 6 7 8 9 10 |  public int getInt(String key)     {         verifyIsNull();         Object o = get(key);         if (o != null)         {             return o instanceof Number ? ((Number) o).intValue() : (int) getDouble(key);         }         throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] is not a number.");     } | 
getDouble方法会抛出异常,如下所示:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public double getDouble(String key)     {         verifyIsNull();         Object o = get(key);         if (o != null)         {             try             {                 return o instanceof Number ? ((Number) o).doubleValue() : Double.parseDouble((String) o);             }             catch (Exception e)             {                 throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] is not a number.");             }         }         throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] is not a number.");     } | 
getBoolean方法会抛出异常,如下所示:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public boolean getBoolean(String key)     {         verifyIsNull();         Object o = get(key);         if (o != null)         {             if (o.equals(Boolean.FALSE) || (o instanceof String && ((String) o).equalsIgnoreCase("false")))             {                 return false;             }             else if (o.equals(Boolean.TRUE) || (o instanceof String && ((String) o).equalsIgnoreCase("true")))             {                 return true;             }         }         throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] is not a Boolean.");     } | 
JSONObject有很多optXXX方法,比如optBoolean,optString,optInt。它们的意思是,如果JsonObject有这个属性,则返回这个属性,否则返回一个默认值。下面以optString方法为例说明一下其底层实现过程:
| 1 2 3 4 5 |     public String optString(String key)     {         verifyIsNull();         return optString(key, "");     } | 
| 1 2 3 4 5 6 |     public String optString(String key, String defaultValue)     {         verifyIsNull();         Object o = opt(key);         return o != null ? o.toString() : defaultValue;     } | 
json教程系列(4)-optXXX方法的使用的更多相关文章
- json教程系列(1)-使用json所要用到的jar包下载
		json是个非常重要的数据结构,在web开发中应用十分广泛.我觉得每个人都应该好好的去研究一下json的底层实现,基于这样的认识,金丝燕网推出了一个关于json的系列教程,分析一下json的相关内容, ... 
- json教程系列(2)-生成JSONObject的方法
		生成JSONObject一般有两种方式,通过javabean或者map类型来生成.如下面的例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2 ... 
- json教程系列(3)-JSONObject的过滤设置
		我们通常对一个json串和java对象进行互转时,经常会有选择性的过滤掉一些属性值.例如下面的类: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... 
- json学习系列(4)-JSONString对象的optXXX方法的使用
		在JSONObject获取value有多种方法,如果使用 getXxx()类型的方法获取value,如getString("key").如果key不存在的话,这些方法无一例外的都会 ... 
- Json.Net系列教程 4.Linq To JSON
		原文 Json.Net系列教程 4.Linq To JSON 更改历史 2013-05-31 添加一个FAQ 一.Linq to JSON是用来干什么的? Linq to JSON是用来操作JSO ... 
- Json.Net系列教程 2.Net类型与JSON的映射关系
		原文 Json.Net系列教程 2.Net类型与JSON的映射关系 首先谢谢大家的支持和关注.本章主要介绍.Net类型与JSON是如何映射的.我们知道JSON中类型基本上有三种:值类型,数组和对象.而 ... 
- WPF入门教程系列(二) 深入剖析WPF Binding的使用方法
		WPF入门教程系列(二) 深入剖析WPF Binding的使用方法 同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProp ... 
- Json.Net系列教程 3.Json.Net序列化和反序列化设置
		原文 Json.Net系列教程 3.Json.Net序列化和反序列化设置 上节补充 首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framewo ... 
- Json.Net系列教程 1.Json.Net介绍及实例
		原文 Json.Net系列教程 1.Json.Net介绍及实例 本系列教程假设读者已经对Json有一定的了解,关于Json在这里不多说.本系列教程希望能对读者开发涉及到Json的.Net项目有一定的帮 ... 
随机推荐
- hdu1533 Going Home 最小费用最大流 构造源点和汇点
			Going Home Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ... 
- mysql存储引擎的种类与差别(innodb与myisam)
			查找数据库的存数引擎: show engines show variables like '%storage_engine%' 更改数据库的引擎更改配置文件/etc/my.cnf 改动default- ... 
- Kafka具体解释五、Kafka Consumer的底层API- SimpleConsumer
			1.Kafka提供了两套API给Consumer The high-level Consumer API The SimpleConsumer API 第一种高度抽象的Consumer API,它使用 ... 
- NDK 安装小结
			建议先看后面的错误,可以先执行那些命令以免出现相关问题. chmod a+x android-ndk-r10c-linux-x86_64.bin ./android-ndk-r10c-linux-x8 ... 
- gstreamer 10.5版本发布啦
- C++数组类型与函数类型
			之所以将C++的数组类型与函数类型拿到一块说,是因为两者在很多地方都一样. 首先,声明形式上类似: 数组类型: type [num] ... 
- JSP接口浅析
			一.tree型关系 JSP页面继承了org.apache.jasper.runtime.HttpJspBase抽象类并实现了org.apache.jasper.runtime.JspSourceDep ... 
- apache+svn No installed service name 'Apache2' 【转载】
			版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://zys0597.blogbus.com/logs/32763815.html 问题:第一次在winxp下 安装apac ... 
- Chai.js断言库API中文文档【转载】
			基于chai.js官方API文档翻译.仅列出BDD风格的expect/should API.TDD风格的Assert API由于不打算使用,暂时不放,后续可能会更新. BDD expect和shoul ... 
- web安全漏洞防护
			Password type input with autocomplete enabled The autocomplete attribute works with the following &l ... 
