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 ...