首页 > 编程语言 >Java 枚举类转json对象

Java 枚举类转json对象

时间:2023-02-15 11:07:21浏览次数:44  
标签:Java anEnum 枚举 大写 aliJson json key 类转

 

1.情景展示

Java 枚举类转json对象_首字母

 

  如上图所示,我想要将枚举类转换成json对象,key对应属性名称,value对应属性值,效果如下:

  {"IvcVoucherCode":"200","IvcVoucherStatus":"票据模板下载成功"} 

  如何实现?     

2.代码实现

  思路:使用spring的org.springframework.beans.BeanWrapperImpl对对象的拆解

  所需jar包:

<!--枚举类转json对象-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>

  具体代码:

/*
* 枚举类转换为json对象
* @attention:
* @date: 2020年11月17日 0017 14:44
* @param: anEnum
* @param: initialUpper key的首字母是否大写
* true:大写,false:小写
* @return: com.alibaba.fastjson.JSONObject
*/
public static com.alibaba.fastjson.JSONObject fromEum(Enum anEnum, boolean initialUpper){
com.alibaba.fastjson.JSONObject aliJson = new com.alibaba.fastjson.JSONObject();
if(anEnum == null) return null;
// json.put("enumName",anEnum.name());

BeanWrapper src = new BeanWrapperImpl(anEnum);
PropertyDescriptor[] pds = src.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
String key = pd.getName();
// 执行新一轮循环,不添加到json中
if("class".equals(key) || "declaringClass".equals(key)){
continue;
}
if (initialUpper) {
aliJson.put(StringUtils.convertInitialUpper(key),src.getPropertyValue(key));
} else {
aliJson.put(key,src.getPropertyValue(key));
}
}
log.debug("枚举转json对象前:" + anEnum.toString());
log.debug("枚举转json对象后:" + aliJson);
return aliJson;
}

  由于枚举的成员变量名称,首字母都是大写,而使用BeanWrapper后,首字母会被转成小写,所以我增加了对于大写的支持。

  关于首字母转大写的代码,见文末推荐

3.测试

Java 枚举类转json对象_首字母_02

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

作者:​​Marydon​​


标签:Java,anEnum,枚举,大写,aliJson,json,key,类转
From: https://blog.51cto.com/u_15964717/6058736

相关文章

  • java8 Lambda表达式遍历并移除元素,报错:ConcurrentModificationException的解决办法
     1.情景展示已知json对象MainExt需要把值为空数组的key移除掉,下面是执行代码执行结果报错:java.util.ConcurrentModificationException 2.原因分析大致过......
  • Javase基础-day9 ATM系统
    ATM系统功能实战系统准备、首页设计系统准备内容分析:①每个用户的账户信息都是一个对象,需要提供账户类。②需要准备一个容器,用于存储系统全部账户对象信息。③首页只......
  • Java Day 5
    二维数组声明:数组类型【】【】 数组名;如何创建二维数组对象及初始化动态初始化1.数组名=new元素的数据类型[行长度][每一行的列长度];  每一行的列数相同2.......
  • 浏览器前端 JavaScript Worker使用
    主Js文件内容://注意://使用前先判断浏览器是否支持//Worker内的代码不可以操作DOM//不能跨域加载Worker的js文件if(window.Worker!==undefined){//新建Worker......
  • java项目记录
    序号问题分析解决1Dependency‘org.springframework.boot:spring-boot-starter-test:notfound的解决方法在右上角的maven中刷新或导包https://blog.csdn.n......
  • Java Day 3
    流程控制语句结构顺序结构同一个方法中,从上往下,顺序执行分支结构条件判断1、单分支条件判断  语法:   if(条件表达式){当条件表达......
  • 读Java实战(第二版)笔记10_函数式编程的技巧
    1. 设计原则1.1. 将所有你愿意接受的作为参数的函数可能带来的副作用以文档的方式记录下来1.2. 最理想的情况下你接收的函数参数应该没有任何副作用1.3. 延迟数据......
  • 第 5 课、java和rest-assured
                               packagecom.les.java.day01;importorg.apache.log4j.Logger;publicclass......
  • java基础之Object中的toString()方法
    toString()方法返回该对象的字符串表示。该字符串由类名、@、和次对象哈希码值的16进制表示组成,换句话说就是原理分析:全限定路径:包名+类名hascode()---》将对象在堆中......
  • java基础之super
    super属性和方法指的是:父类super可以修饰属性,修饰方法。在子类的方法中,可以通过super属性,super方法的方式,显式的去调用父类的属性和犯法,在通常情况下,super.可以省略不写......