使用各种 json 工具先转字符串 json 再转 map 也可以,但是还得处理日期啊什么的这些特殊字符,而且这种方式也很难受啊。
有什么好用的工具吗?
![]() | 1 jamesliu96 2019-07-23 18:05:57 +08:00 via Android 我以前是自己用反射写,也是苦于找不到能完成需求的工具 |
![]() | 2 chendy 2019-07-23 18:07:06 +08:00 好奇什么场景…会有这种需求 |
![]() | 3 BBCCBB 2019-07-23 18:09:14 +08:00 Jackson 就可以 |
![]() | 4 BBCCBB 2019-07-23 18:09:20 +08:00 有 convert 的 api. |
![]() | 5 BBCCBB 2019-07-23 18:10:10 +08:00 或者 dozer 也可以,不过 jackson 就可以满足需求,没必要引入 dozer |
![]() | 6 qwerthhusn 2019-07-23 18:18:37 +08:00 ![]() public static Map<String, Object> main(Object args) { return Arrays.stream(BeanUtils.getPropertyDescriptors(args.getClass())) .filter(pd -> !"class".equals(pd.getName())) .collect(HashMap::new, (map, pd) -> map.put(pd.getName(), ReflectionUtils.invokeMethod(pd.getReadMethod(), args)), HashMap::putAll); } 写的,很简单,前提是用了 JDK8 或者以上,用了 Spring |
![]() | 7 cubecube 2019-07-23 18:20:33 +08:00 via Android 没有太好的,都有很大的性能损耗。不在乎的话,json 就行。或者 beanutils 在乎的话,mapstruct |
![]() | 8 passerbytiny 2019-07-23 18:23:23 +08:00 需求场景几乎不存在,自己用反射写吧。 |
![]() | 9 qwerthhusn 2019-07-23 18:24:28 +08:00 @jamesliu96 6 楼满足你的需求 |
![]() | 10 wysnylc 2019-07-23 19:54:15 +08:00 最简单的方式,转成 json 字符串再反序列化 |
![]() | 11 springmarker 2019-07-23 20:40:28 +08:00 自己写反射咯,当然还得考虑父类的字段 |
12 leafShimple 2019-07-23 20:54:54 +08:00 fastjson 直接用 |
![]() | 13 letitbesqzr 2019-07-23 22:05:04 +08:00 hutool 工具类中 BeanUtil.beanToMap 也是通过反射实现 |
![]() | 14 cheng6563 2019-07-23 22:30:22 +08:00 via iPhone fastjson 直接转成 JSONObject,就是一个 map |
![]() | 15 cheng6563 2019-07-23 22:32:11 +08:00 via iPhone fastjson 转了之后还有一堆入 getIntValue 之类的实用方法,真心觉得 fastjson 的 API 是最好用的了 |
![]() | 16 CoderGeek 2019-07-23 22:39:47 +08:00 CGLIB BeanMap |
![]() | 17 cassyfar 2019-07-24 03:02:01 +08:00 Jackson |
![]() | 18 Variazioni 2019-07-24 08:30:49 +08:00 fastjson 来回倒腾转一下就行。。。挺好用的。。 |
19 fff333 2019-07-24 09:12:14 +08:00 推荐 gson,fast 经常爆漏洞 |
![]() | 20 HolmLoh 2019-07-24 09:22:07 +08:00 via Android 反射吧,我都是写好抽象类,需要转 map 的话直接继承的 |
21 niaobulashi 2019-07-24 09:37:51 +08:00 ``` /** * java bean 转 Map * @param bean * @param propNames 需要放到 map 中的属性名称 * @return */ public static Map<String,Object> beanToMap(Object bean, String...propNames) { Map<String,Object> rtn = new HashMap<String,Object>(); if(ArrayUtils.isEmpty(propNames)){ List<String> fieldNames = getFieldNames(bean.getClass()); for (String fieldName: fieldNames) { Object value = getProperty(bean, fieldName); rtn.put(fieldName, value); } }else{ for(String propName: propNames){ Object value = getProperty(bean, propName); rtn.put(propName, value); } } return rtn; } ``` |
22 niaobulashi 2019-07-24 09:39:21 +08:00 emmmm,评论不能用 md 格式了 |
![]() | 23 brust 2019-07-24 09:44:36 +08:00 Gson,FastJSON |
![]() | 24 zhybb2010 2019-07-24 10:23:58 +08:00 不要管性能,速度,拿起 fastjson 就是一套 comb。 |
![]() | 25 wo0uewjuoi 2019-07-24 10:32:47 +08:00 @fff333 前几个礼拜刚刚按要求升级 fast 版本防漏洞。。。 |
![]() | 27 quadrapop 2019-07-24 13:52:43 +08:00 6 楼写法挺大佬的 |
![]() | 28 xuanbg 2019-07-24 13:56:43 +08:00 用 json 序列化对象再反序列化成 Map 呀,还要什么自行车。。。话说我们对象复制、对象转换也是这样搞,爽歪歪 |
![]() | 29 twoyuan 2019-07-24 14:24:43 +08:00 Kotlin 的话就定义个扩展函数的事: fun Any.objToMap() = this::class.declaredMemberProperties.map { it.name to it.call(this) }.toMap() |
![]() | 30 LeeSeoung 2019-07-24 14:30:03 +08:00 使用 beanutils.describe |
31 abai 2019-07-24 22:41:00 +08:00 BeanMap |