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

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

来看一下几个getXxx()方法的源代码实现:

getString:如果key不存在,getString方法会抛出异常,如下所示:

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:如果key不存在,getInt方法会抛出异常,如下所示:

 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:如果key不存在,getDouble方法会抛出异常,如下所示:

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:如果key不存在,getBoolean方法会抛出异常,如下所示:

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方法为例说明一下其底层实现过程:

public String optString(String key)

    {

        verifyIsNull();

        return optString(key, "");

    }

上面的例子表示如果key值不存在,则返回空字符串。

public String optString(String key, String defaultValue)

    {

        verifyIsNull();

        Object o = opt(key);

        return o != null ? o.toString() : defaultValue;

    }

上面的例子表示如果key值不存在,则返回默认值defaultValue

你可能感兴趣的:(String)