net.sf.json.JSONObject判断json是否为空

日常开发中,常常会对一些JSONObject进行判空处理,在这里做下记录先说结论,如果只是想判断是否是null,那么就使用JSONObject.isNullObject()方法,而如果还想判断里面的内容是否为空,那么就要使用isEmpty()方法了。

分析:
   首先,用jsonObject == null的方式来判断是不行的,我们通过JSONObject对象get出来的值不是普通的null,而是一个JSONNull,见如下代码
Map<String, String> map = new HashMap<String, String>();
map.put("A", null);
JSONObject jsonObject = JSONObject.fromObject(map);
System.out.println(null == jsonObject.get("A"));//输出false
System.out.println(jsonObject.get("A") instanceof JSONNull);//输出true
那么我们可以使用工具提供的api来判空,比如:
jsonObject.isEmpty();//这个是JSONObject实现的父接口Map中的方法
jsonObject.isNullObject();//这个是JSONObject自己的方法
其实这两个方法也是有区别的:
        因为isEmpty()是java.util.Map中的方法,简单说它其实做的类似(!jsonObject instanceof JSONNull && jsonObject.size() > 0)的逻辑判断。
        而jsonObject.isNullObject()因为是JSONObject自己实现的方法,它只是做了类似(!jsonObject instanceof JSONNull)的逻辑判断,因此当JSONObject对象实例化之后,但是里面并没有数据时使用这个方法是不能对其进行完整的判空的,要特别注意。

示例:

        Map<String, String> mapA = new HashMap<String, String>();
        mapA.put("A", null);
        JSONObject jsonObjectA = JSONObject.fromObject(mapA);
        System.out.println("jsonObjectA = " + jsonObjectA);
        System.out.println("jsonObjectA.getJSONObject(\"A\") : " + jsonObjectA.getJSONObject("A"));
        System.out.println("isNullObject() : " + jsonObjectA.getJSONObject("A").isNullObject());//true
        System.out.println("isEmpty() : " + jsonObjectA.getJSONObject("A").isEmpty());//true

        System.out.println("----------------------------------");

        Map<String, Object> mapB = new HashMap<String, Object>();
        mapB.put("B", new HashMap<String, Object>());
        JSONObject jsonObjectB = JSONObject.fromObject(mapB);
        System.out.println("jsonObjectB = " + jsonObjectB);
        System.out.println("jsonObjectB.getJSONObject(\"B\") : " + jsonObjectB.getJSONObject("B"));
        System.out.println("isNullObject() : " + jsonObjectB.getJSONObject("B").isNullObject());//false
        System.out.println("isEmpty() : " + jsonObjectB.getJSONObject("B").isEmpty());//true

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值