json教程系列(4)-optXXX方法的使用

在JSONObject获取value有多种方法,如果key不存在的话,这些方法无一例外的都会抛出异常。如果在线环境抛出异常,就会使出现error页面,影响用户体验,针对这种情况最好是使用optXXX方法。

 1  public String getString(String key)
 2     {
 3         verifyIsNull();
 4         Object o = get(key);
 5         if (o != null)
 6         {
 7             return o.toString();
 8         }
 9         throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] not found.");
10     }

getInt方法会抛出异常,如下所示:

 1  public int getInt(String key)
 2     {
 3         verifyIsNull();
 4         Object o = get(key);
 5         if (o != null)
 6         {
 7             return o instanceof Number ? ((Number) o).intValue() : (int) getDouble(key);
 8         }
 9         throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] is not a number.");
10     }

getDouble方法会抛出异常,如下所示:   

 1 public double getDouble(String key)
 2     {
 3         verifyIsNull();
 4         Object o = get(key);
 5         if (o != null)
 6         {
 7             try
 8             {
 9                 return o instanceof Number ? ((Number) o).doubleValue() : Double.parseDouble((String) o);
10             }
11             catch (Exception e)
12             {
13                 throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] is not a number.");
14             }
15         }
16         throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] is not a number.");
17
18     }

getBoolean方法会抛出异常,如下所示:  

 1 public boolean getBoolean(String key)
 2     {
 3         verifyIsNull();
 4         Object o = get(key);
 5         if (o != null)
 6         {
 7             if (o.equals(Boolean.FALSE) || (o instanceof String && ((String) o).equalsIgnoreCase("false")))
 8             {
 9                 return false;
10             }
11             else if (o.equals(Boolean.TRUE) || (o instanceof String && ((String) o).equalsIgnoreCase("true")))
12             {
13                 return true;
14             }
15         }
16         throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] is not a Boolean.");
17     }

JSONObject有很多optXXX方法,比如optBoolean,optString,optInt。它们的意思是,如果JsonObject有这个属性,则返回这个属性,否则返回一个默认值。下面以optString方法为例说明一下其底层实现过程:JSONObject有很多optXXX方法,比如optBoolean,optString,optInt。它们的意思是,如果JsonObject有这个属性,则返回这个属性,否则返回一个默认值。下面以optString方法为例说明一下其底层实现过程:

1     public String optString(String key)
2     {
3         verifyIsNull();
4         return optString(key, "");
5     }

1   public String optString(String key, String defaultValue)
2     {
3         verifyIsNull();
4         Object o = opt(key);
5         return o != null ? o.toString() : defaultValue;
6     }

时间: 2024-10-25 04:10:57

json教程系列(4)-optXXX方法的使用的相关文章

json教程系列(5)-json错误解析net.sf.ezmorph.bean.MorphDynaBean cannot be cast to

在平常的开发中,我们经常会遇到JSONObject和Bean的互换,JSONArray和List<Bean>的互换,具体的操作可以看下面的小例子. 1 public class Test 2 { 3 public static void main(String args[]) 4 { 5 User temp = new User(); 6 temp.setUsername("root"); 7 temp.setPassword("root"); 8 //

json教程系列(3)-JSONObject的过滤设置

我们通常对一个json串和java对象进行互转时,经常会有选择性的过滤掉一些属性值.例如下面的类: 1 public class Person 2 { 3 private String name; 4 private String address; 5 private String sex; 6 7 public String getAddress() 8 { 9 return address; 10 } 11 12 public void setAddress(String address)

json学习系列(4)-JSONString对象的optXXX方法的使用

在JSONObject获取value有多种方法,如果使用 getXxx()类型的方法获取value,如getString("key").如果key不存在的话,这些方法无一例外的都会抛出异常.如果在线环境抛出异常,就会使出现error页面,影响用户体验,针对这种情况最好是使用JSONObject的optXXX方法. 来看一下几个getXxx()方法的源代码实现: getString:如果key不存在,getString方法会抛出异常,如下所示: public String getStri

Swift新手教程系列5-函数+selector在swift中的使用方法

原创blog.转载请注明出处 近期在用swift写代码,尽管遇到一些问题,可是代码量确实减了不少. swfit新手教程系列会随着我使用swfit中的积累,不断地去修正更新 之前的教程 swift单例模式具体解释-线程安全,多核性能 swift新手教程4-集合(Array,Dictionary) swift新手教程3-字符串String swift新手教程2-运算符 swift新手教程1-准备知识 在swift中,函数有keywordfunc声明 格式 func 函数名(參数1,參数2,...)-

WPF入门教程系列(二) 深入剖析WPF Binding的使用方法

WPF入门教程系列(二) 深入剖析WPF Binding的使用方法 同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProperty)只能拥有一个binding. 这一点可以通过设置binding对象的方法名得知: public static BindingExpressionBase SetBinding( DependencyObject target, DependencyProperty dp, BindingB

org.json.JSONObject的optXXX方法

JSONObject有很多optXXX方法,比如optBoolean,optString,optInt.... 他们的意思是:如果这个JSONObject对象,如果有返回这个属性的值,如果没有返回一个默认值. 例如: JSONObject json = new JSONObject(content); int x = json.optInt("length",-1); 表示如果json有length属性,则返回length值,否则返回-1: 其他的optXXX方法都类似

SeaJS入门教程系列之使用SeaJS(二)

SeaJS入门教程系列之使用SeaJS(二) 作者: 字体:[增加 减小] 类型:转载 时间:2014-03-03我要评论 这篇文章主要介绍了SeaJS入门教程系列之使用SeaJS,着重介绍了SeaJS的使用方法.关键方法的使用等,需要的朋友可以参考下 下载及安装 要在项目中使用SeaJS,你所有需要做的准备工作就是下载sea.js然后放到你项目的某个位置.SeaJS项目目前托管在GitHub上,主页为 https://github.com/seajs/seajs/ .可以到其git库的buil

微信支付教程系列之扫码支付

微信支付教程系列之扫码支付 http://www.cnblogs.com/nangong/p/9fa625bfb92a986125f0ba72704c46ec.html 今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添加好友的时候,可以通过输入对方的微信号,也可以扫一扫对方的二维码.扫码支付,作为,微信支付里面,不可或缺的一个功能,对商品的支付提供了极为方便的体验,用途也非常的多.例如我们在地铁.公交站常见

【原创分享&#183;微信支付】 C# 微信支付教程系列之扫码支付

微信支付教程系列之扫码支付 今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添加好友的时候,可以通过输入对方的微信号,也可以扫一扫对方的二维码.扫码支付,作为,微信支付里面,不可或缺的一个功能,对商品的支付提供了极为方便的体验,用途也非常的多.例如我们在地铁.公交站常见的那些自动售货机(不错,就是那种投硬币,就可以自动出货的那种机器)中都用到.以前,那种机器,只能通过投硬币或者纸币,但是,这里面也有一定的风险