jsonObject.getString()与jsonObject.optString()「建议收藏」

jsonObject.getString()与jsonObject.optString()「建议收藏」常见使用原生的解析json方法:JSONObjectjsonObject=newJSONObject();Stringstr1=jsonObject.optString(“6不6”);Stringstr2=jsonObject.optString(“6不6″,”默认6”);try{Str

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

常见使用原生的解析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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/193755.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • LintCode – Ladder4 Breadth First Search

    LintCode – Ladder4 Breadth First Search

  • 怎么将方波转化为正弦波(正弦波变成方波的原理)

    一、题目要求:1、使用555做出脉冲方波2、使用TL084运放做出方波和锯齿波3、使用TLM314稳压做直流偏置4、方波要求峰峰值为1V,正弦波要求峰值为0~2V,锯齿波要求峰峰值为1V。二、解题流程1、使用555做出脉冲方波(1)参数计算(2)仿真设计图:(3)仿真波形(4)实际操作中总结的经验A、一个滑动变阻器十分的重要,我们需要购入一个,在正式比赛的时候。(如果要参加比赛,我们自己买一…

  • 0-1多重背包(单调队列+多重背包)[通俗易懂]

    0-1多重背包(单调队列+多重背包)[通俗易懂]原题链接有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V (0<N≤1000, 0<V≤20000),用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。输出格式输出一个整数,表示最大价值。数据范围0<N≤1

  • case label does not reduce to_class not loaded

    case label does not reduce to_class not loadedClassCastException出现原因解决办法出现原因抛出以指示代码已尝试将对象强制转换为它不是实例的子类。例如,以下代码生成一个ClassCastException:对象x=新整数(0);System.out.println((String)x);解决办法这种异常我也不知道有什么能够完全解决的办法,但是可以同instanseof来避免例如:Pet宠物类   Dog狗狗类(继承Pet)  Penguin企鹅类(继承Pet)  Dogdog=(Dog)pet

  • wget命令详解,断点续传[通俗易懂]

    wget命令详解,断点续传[通俗易懂](1)支持断点下传功能(2)同时支持FTP和HTTP下载方式(3)支持代理服务器(4)设置方便简单(5)程序小,完全免费?wget虽然功能强大,但是使用起来还是比较简单的,基本的语法是:wget[参数列表]URL。下面就结合具体的例子来说明一下wget的用法。1、下载整个http或者ftp站点。wgethttp://place.your.url

  • 小米wifidhcp服务器没有响应,小米路由器dhcp服务没有响应怎么解决[通俗易懂]

    小米wifidhcp服务器没有响应,小米路由器dhcp服务没有响应怎么解决[通俗易懂]摘要腾兴网为您分享:苹果手机,番茄小说,闲聊app,蚂蚁深林,微博等知识经验教程,欢迎大家关注腾兴网。小米路由器是很多家庭的选择,使用中也会碰到一些问题,很多小伙伴碰到的问题是dhcp服务没有响应,怎么解决呢,小编来为大家介绍。小米路由器dhcp服务没有响应怎么解决本地服务中的wiredautoconfig服务没有设为自动。解决方法:1、运行->services.msc2、找到wire…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号