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

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);
    }

测试案例效果

 

相关文章:

  • 应急响应笔记
  • stm32 2.0.3.0
  • python-leetcode 60.分割回文串
  • K8S中若要挂载其他命名空间中的 Secret
  • h265 flv.js组件封装Vue3
  • 【软考-架构】8.4、信息化战略规划-CRO-SCM-应用集成-电子商务
  • 【Linux】VMware17 安装 Ubuntu24.04 虚拟机
  • Ubutu20.04安装docker与docker-compose
  • Spring Boot 异步返回对象深度解析
  • #pandas #python#数据标注 pd.crosstab()
  • STM32U575RIT6单片机(四)
  • 嵌入式c学习七
  • 企业架构与IT方法论:现代企业的基石
  • SQLark 实战 | 如何通过对象名和 DDL 快速搜索数据库对象
  • Unity TextMeshPro中显示建筑特殊符号
  • 【NGINX代理附件上传服务配置优化】
  • java项目之基于ssm的旅游论坛(源码+文档)
  • k8s搭建kube-prometheus
  • 在 Ubuntu 中用 Docker 安装 RAGFlow
  • 相同Vlan间的通信
  • 专利申请全球领先!去年我国卫星导航与位置服务产值超5700亿
  • 被围观的“英之园”,谁建了潮汕天价违建?
  • 阿里上财年营收增6%,蒋凡:会积极投资,把更多淘宝用户转变成即时零售用户
  • 因港而兴,“长江黄金水道”上的宜宾故事
  • 国内首家破产的5A景区游客爆满,洛阳龙潭大峡谷:破产并非因景观不好
  • 人民日报评外卖平台被约谈:摒弃恶性竞争,实现行业健康发展