当前位置: 首页 > 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);
    }

测试案例效果

 

http://www.dtcms.com/a/81147.html

相关文章:

  • 应急响应笔记
  • 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间的通信
  • HBase启动问题排查指南:解决HMaster和HRegionServer未运行的常见错误
  • 【C语言】使用结构体实现位段
  • Redis之单线程与多线程
  • ASP.NET Core 使用 MongoDB
  • Git Flow 分支管理策略
  • LeetCode算法题(Go语言实现)_01
  • GR00T N1——英伟达开源的通用人形VLA:类似Helix的快与慢双系统,且可类似ViLLA利用海量的无标注视频做训练
  • Docker和Dify学习笔记
  • c++简单实现redis
  • 使用LLaMA Factory微调导出模型,并用ollama运行,用open webui使用该模型