• 使用Gson中的JsonElement所遇到的坑


    Google的gson.jar包在开发中经常使用,有一些细节的地方稍不注意就会踩到坑。这里介绍一下使用JsonElement取值所遇到的问题,避免以后再犯这种错误。
    我们先看一个例子:

    public static void main(String[] args) {
            JsonObject js = new JsonObject();
            js.addProperty("name", "phone");
            js.addProperty("price", 999);
            js.addProperty("type", "mi");
    
            System.out.println("js-->" + js);
            String jsStr = js.toString();
            System.out.println("str-->" + jsStr);
            System.out.println("------------------");
    
            if("mi".equals(js.get("type"))){
                System.out.println("这是小米手机");
            }else{
                System.out.println("这不是小米手机");
            }
    
            if("mi".equals(js.get("type").toString())){
                System.out.println("这是小米手机");
            }else{
                System.out.println("这不是小米手机");
            }
        }

    输出信息如下:

    js-->{"name":"phone","price":999,"type":"mi"}
    str-->{"name":"phone","price":999,"type":"mi"}
    ------------------
    这不是小米手机
    这不是小米手机

    在JsonObject js里面,”type”对应的值应该是String类型的”mi”,那么输出信息应该是”这是小米手机”。
    为什么这里输出结果不是我们预想那样呢?是不是很奇怪,感兴趣的同学可以先自己想想再接着往下看。

    我们先把if()里面的判断条件打印出来,会看到:

    JsonElement-->"mi"
    JsonElement2Str-->"mi"

    细心的同学其实可以发现js.get(“type”)和type.toString()返回的都是”“mi”“(注意多了一对双引号),我当时也是通过打断点一步步调试才发现这个问题。

    难道我们把if里面判断条件也改成”“mi”“,这样虽然满足了判断条件,但总是有点怪怪的感觉。
    查阅gson的api文档,会发现JsonElement还有一个getAsString()方法,于是试了一下 js.get(“type”).getAsString(),输出字符串mi,很明显这里是没有双引号的。
    getAsString
    加上isJsonNull()防止出现null,使程序更健壮。

    对于int、boolean、long等类型,取值方法也是类似的。如下图:

    int prc = ((JsonElement)js.get("price")).isJsonNull()? -1 : js.get("price").getAsInt();
            System.out.println(prc);
            if(prc == 999){
                System.out.println("价格只要999");
            }else{
                System.out.println("价格不是999");
            }

    getAsInt

    例子看起来很简单,但是实际开发中如果忽视了这些问题,会花费很长时间来debug,所以还是应该细心一点。

  • 相关阅读:
    linux下postgresql的c程序编译问题
    Linux下Sublime Text 2中文显示及中文输入问题[转][ubuntu 10.10]
    linux英文斜体乱码 【ubuntu 10.10】
    dropbox无法访问后国内网盘对比选择
    Linux查看系统信息的一些命令及查看已安装软件包的命令(转)
    linux配置ssh 【ubuntu 10.10】
    error: failed to push some refs【Linux】【Git】
    一些曾经收藏的话
    Linux系统源码安装过程中的prefix选项【转】
    LINUX GBK>UTF8文件编码批量转换脚本[转]
  • 原文地址:https://www.cnblogs.com/lishbo/p/9956004.html
Copyright © 2020-2023  润新知