赞
踩
日常开发中,常常会对一些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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。