当前位置: 首页 > article >正文

Object 转 JSONObject 并排除null和““字符串

 public static JSONObject objToJSONObject(Object obj) throws Exception{
        //创建一个 HashMap 对象 map,用于存储对象的属性名和属性值。
        //key 是属性名(String 类型),value 是属性值(Object 类型)
        Map<String, Object> map = new HashMap<>();
        //BeanInfo 包含了对象的所有属性描述符(PropertyDescriptor),用于访问对象的属性。
        BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
        //遍历 BeanInfo 中的所有属性描述符 PropertyDescriptor。
        //每个 PropertyDescriptor 对应对象的一个属性
        for (PropertyDescriptor pd : beanInfo.getPropertyDescriptors()) {
            //获取当前属性的名称,并赋值给 name
            String name = pd.getName();
            //如果属性名是 "class",则跳过该属性。
            //因为 class 是 Java 对象的默认属性,表示对象的类信息,通常不需要转换为 JSON
            if ("class".equals(name)) continue;
            //使用 PropertyDescriptor 的 getReadMethod 方法获取属性的读取方法(getter)。
            //通过 invoke(obj) 调用该 getter 方法,获取属性的值,并赋值给 value
            Object value = pd.getReadMethod().invoke(obj);
            if (null != value && !value.equals("")) { // 过滤 null 值和空字符串
                //如果属性值是 Date 类型,则将其转换为时间戳(long 类型),再调用 timestamp2Datetime 方法将时间戳转换为日期时间字符串
                if (value instanceof Date) {
                    value = timestamp2Datetime(((Date) value).getTime());
                }
                map.put(name, value);
            }
        }
        return new JSONObject(map);
    }

    /**
     * 时间戳转为日期
     */
    public static String timestamp2Datetime(long timestamp) {
        if (0 != timestamp) {
            //将long型时间戳转换为时间
            Date date = new Date(timestamp);
            //转换为字符串输出
            return date2Str(date, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
        }

        return null;
    }

    /**
     * 日期转换为字符串(指定日期和格式)
     */
    public static String date2Str(Date date, SimpleDateFormat sdf) {
        if (null == date) {
            return null;
        }
        return sdf.format(date);
    }

测试案例效果

 


http://www.kler.cn/a/596212.html

相关文章:

  • SpringSecurity——前后端分离登录认证
  • 工作相关记录
  • 深入了解 C# 中的 LINQ:功能、语法与应用解析
  • 基于深度学习的皮肤癌智能检测与语音提示系统【python源码+Pyqt5界面+数据集+训练代码】
  • 使用ArgoCD管理Kubernetes部署指南
  • php文件包含与伪协议
  • (electron 报错)TypeError: Cannot read property ‘upgrade‘ of undefined
  • MySQL身份验证的auth_socket插件
  • Java基础面试题学习
  • ruoyi-vue部署linux(war包方式)
  • 【DNN量化工具】QKeras 工具简介
  • springmvc中使用interceptor拦截
  • TensorFlow 与 Matplotlib 核心知识点及实战案例
  • 2953. 统计完全子字符串(将题目中给的信息进行分组循环)
  • JavaIO流的使用和修饰器模式(直击心灵版)
  • 解释什么是受控组件和非受控组件
  • git 查看某个函数的所有提交日志
  • Web爬虫利器FireCrawl:全方位助力AI训练与高效数据抓取。本地部署方式
  • 【入门初级篇】报表基础操作与功能介绍
  • 大数据处理最容易的开源平台