判断JSONObject是否为空

json版本:

        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>

假设一个json,格式为:
{
“code”:200,
“message”:”OK”,
“detail”:{
“id”:”123”,
“name”:”liuyang”
}
}

或者
{
“code”:200,
“message”:”FAIL”,
“detail”:null
}
需要判断detail是否为空,开始的做法是:

JSONObject detail = obj.getJSONObject("detail");
if(detail!=null){ //do something }

结果不论哪种json,都能进去。。这是一个大坑。。
然后试着随便调了个方法,也不会报空指针异常。

    String json =   "{\"code\":200,\"message\":\"FAIL\",\"detail\":null}";
    @Test
    public void testNull(){
        JSONObject object = JSONObject.fromObject(json);
        JSONObject detail = object.getJSONObject("detail");
        System.out.println(detail.toString());
        if(detail!=null &&  !"null".equals(detail)){
            System.out.println("detail is not null");
        }
    }
}

运行结果:

null
detail is not null

这个jsonobject可以输出为null,但是不等于null或“null”。。

我用了containsKey方法来判断该值是否为空,
即obj.containsKey(“id”);
若该json对象中存在该key则该对象不为空

String json =   "{\"code\":200,\"message\":\"FAIL\",\"detail\":null}";
    @Test
    public void testNull(){
        JSONObject object = JSONObject.fromObject(json);
        JSONObject detail = object.getJSONObject("detail");
        System.out.println(detail.toString());
        if(detail.containsKey("id")){
            System.out.println("obj is not null");
        }else{
            System.out.println("obj is null");
        }
    }

输出结果:

null
obj is null

网上也有说用isEmpty() 和isNullObject()的,应该也是可以的,但是个人觉得这两个方法在名称上过于类似,容易混淆,为了避免不必要的错误,还是尽量少用为好。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值