使用各种 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 1
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
guoluwei 2019-07-24 22:41:00 +08:00
BeanMap
|