net.sf.json判断对象属性是否为空
说明:今天写代码发现对net.sf.json.JSONObject取值后判断是否为null,死活进不去,打印了获取属性后的值,发现是一个被封装为JSONNull对象
import net.sf.json.JSONNull; import net.sf.json.JSONObject; import java.util.HashMap; import java.util.Map; public class Test { public static void main(String[] args) { Map<String, Object> m = new HashMap<>(); m.put("aa", null); JSONObject json = JSONObject.fromObject(m); Object o = json.get("aa"); System.out.println(o.getClass()); System.out.println(null == json.get("aa")); System.out.println(JSONNull.getInstance().equals(json.get("aa")));
System.out.println(o instanceof JSONNull) } }
对应的打印
class net.sf.json.JSONNull false true
点进去看JSONNull源码如下
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package net.sf.json; import java.io.IOException; import java.io.Writer; public final class JSONNull implements JSON { private static JSONNull instance = new JSONNull(); //默认是一个JSONNull的实例 instance public static JSONNull getInstance() { return instance; } private JSONNull() { } //可以传null来进行判断 public boolean equals(Object object) { return object == null || object == this || object == instance || object instanceof JSONObject && ((JSONObject)object).isNullObject() || "null".equals(object); } //这个也可以,但是会抛异常,业务代码中,这种肯定是不想要被抛出的 public boolean isEmpty() { throw new JSONException("Object is null"); } //这个也可以,抛异常对业务代码不太友好 public int size() { throw new JSONException("Object is null"); } //这个可间接判断 public String toString() { return "null"; } //··· }
可用的判断属性是否为空的方法,建议使用重写的equals方法,因为JSONNull没有提供有参的构造方法,创造instance,进而进行调用toString、size、isEmpty等方法,也真是够垃圾的,我找了一
圈,在net.sf.json.JSONObject 中找到了几处JSONNull的使用,用的都是toString方法或者equal方法
//判断属性aa的值是否是null JSONNull.getInstance().equals(json.get("aa"))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)