jsonObject.getString()与jsonObject.optString()

来源:互联网 发布:linux run parts 编辑:程序博客网 时间:2024/04/28 01:18

常见使用原生的解析json方法:

        JSONObject jsonObject = new JSONObject();        String str1 = jsonObject.optString("6不6");        String str2 = jsonObject.optString("6不6","默认6");        try {            String str3 = jsonObject.getString("666");        } catch (JSONException e) {            e.printStackTrace();        }

一:optString与getString的区别:

optString会在得不到你想要的值时候返回空字符串“ ”或指定的默认值,而getString会抛出异常。

optString可以解决服务器字段缺少或者没有该字段而导致的异常以至于程序崩溃。

推荐使用optString,可避免接口字段的缺失、value的数据类型转换等异常。

二:getString()可获取任意类型的数据?

先看JSONObject的源码如下:

JSONObject类部分源码:

    /**     * Returns the value mapped by {@code name} if it exists, coercing it if     * necessary, or throws if no such mapping exists.     *     * @throws JSONException if no such mapping exists.     */    public String getString(String name) throws JSONException {        Object object = get(name);        String result = JSON.toString(object);//任何类型强转为string        if (result == null) {            throw JSON.typeMismatch(name, object, "String");//为空抛出解析        }        return result;    }    /**     * Returns the value mapped by {@code name} if it exists, coercing it if     * necessary, or the empty string if no such mapping exists.     */    public String optString(String name) {        return optString(name, "");    }    /**     * Returns the value mapped by {@code name} if it exists, coercing it if     * necessary, or {@code fallback} if no such mapping exists.     */    public String optString(String name, String fallback) {        Object object = opt(name);        String result = JSON.toString(object);        return result != null ? result : fallback;//不为空取结果,为空取指定值    }

可以看到getString、optString任意类型的value在return之前都会被强转为string类型,
这也就是为什么一直用getString来获取字段时从没出现过数据类型异常的原因。

getString只有在没有该字段或结果为null的时候才会抛出异常。类型不会导致异常。

参考:jsonObject.getString()解析任意字段均可强转为string

原创粉丝点击