-
2018-07-25 11:38:28
仅供参考
@Log4j
public class ObjectToMap {
/*简单Object转成map*/
public static Map<String,String> toMap(Object o){
Map<String,String> map=new HashMap<String, String>();
Field[] fields=o.getClass().getDeclaredFields();
try {
for (int i=0;i<fields.length;i++) {
String name=fields[i].getName();
Field field=o.getClass().getDeclaredField(name);
field.setAccessible(true);
if (null!=field){
map.put(name,field.get(o).toString());
}
}
}catch(Exception e){
log.error(e.getMessage(),e);
}
return map;
}
/*复杂Object转成map*/
public static Map<String, Object> toObjectMap(Object object) {
Map<String, Object> map = new HashMap<String, Object>();
toMap(object.getClass(), object, map);
return map;
}
private static void toMap(Class<?> clazz, Object object, Map<String, Object> map) {
Method[] methods = clazz.getDeclaredMethods();
if (methods != null && methods.length > 0) {
for (Method method : methods) {
String mname = method.getName();
if (mname.startsWith("get") && method.getParameterTypes().length == 0) {
try {
String fieldName = mname.substring(3, 4).toLowerCase() + mname.substring(4);
if ("serialVersionUID".equals(fieldName)) {
continue;
} else if ("class".equals(fieldName)) {
continue;
}
Object fieldValue = method.invoke(object, null);
if (fieldValue != null) {
map.put(fieldName, fieldValue);
}
} catch (IllegalAccessException e) {
log.info(e.getMessage(),e);} catch (InvocationTargetException e) {
log.info(e.getMessage(),e);
} catch (SecurityException e) {
log.error(e.getMessage(),e);
}
}
}
}
if (clazz.getSuperclass() != null) {
toMap(clazz.getSuperclass(), object, map);
}
}public static void main(String[] args)throws Exception {
Tests tests=new Tests(10,"zhangsan");
ObjectToMap om= new ObjectToMap();
Map<String,String> map= om.toMap(tests);
System.out.println(map.toString());
Map<String,Object> omap= om.toObjectMap(tests);
System.out.println(omap.toString());
}}
class Tests{
private int age;
private String name;public Tests(int age,String name) {
this.age=age;
this.name=name;
}
public int getAge() {
return age;
}public void setAge(int age) {
this.age = age;
}public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}
}更多相关内容 -
Java中Object转Map类型,Map转Object类型
2020-07-31 09:40:11在使用Java编程过程中,经常会遇到获取的数据为Object类型,但只是以这种方式传输,实质还是Map类型,此时就涉及到两种类型的相互转换。 强制转换 在类型转换工程中,常见的转换方式为强制转换。如(String)map.get...前言
在使用Java编程过程中,经常会遇到获取的数据为
Object
类型,但只是以这种方式传输,实质还是Map
类型,此时就涉及到两种类型的相互转换。强制转换
在类型转换工程中,常见的转换方式为强制转换。如
(String)map.get(key)
,(int)map.get(key)
等。但是如果接收的类型为Map
,此时强转(Map<String, Object>) obj
则会报出警告。治标不治本
很多人会使用@SuppressWarnings(“unchecked”)来解决编辑器中的警告,好看是好看了。但是这用来告诉编译器忽略警告,而警告却实实在在的存在。项目的风险还是存在。
方法一
可以使用
java.lang.reflect.Field
类完成Obj
和Map
之间的相互转换.Object
转Map
类型
//Object转Map public static Map<String, Object> getObjectToMap(Object obj) throws IllegalAccessException { Map<String, Object> map = new HashMap<String, Object>(); Class<?> cla = obj.getClass(); Field[] fields = cla.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); String keyName = field.getName(); Object value = field.get(obj); if (value == null) value = ""; map.put(keyName, value); } return map; }
Map
转Object
类型
//Map转Object public static Object getMapToObject(Map<Object, Object> map, Class<?> cla) throws Exception { if (map == null) return null; Object obj = cla.newInstance(); Class<?> cla = obj.getClass(); Field[] fields = cla.getDeclaredFields(); for (Field field : fields) { int mod = field.getModifiers(); if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) { continue; } field.setAccessible(true); if (map.containsKey(field.getName())) { field.set(obj, map.get(field.getName())); } } return obj; }
通过
Field
类进行数据类型的转换。方法二
通过
BeanUtils
工具类进行转换//1、map转换为object public static Object mapToObject(Map<String, Object> map, Class<?> cla) throws Exception { if (map == null) return null; Object obj = clas.newInstance(); org.apache.commons.beanutils.BeanUtils.populate(obj, map); return obj; } //2、object转换为map public static Map<?, ?> objectToMap(Object obj) { if (obj == null) return null; return new org.apache.commons.beanutils.BeanMap(obj); }
总结
最后,通过调用这两个方法就可以实现Object转Map类型,Map转Object类型。
-
java实现Object和Map之间的转换3种方式
2020-08-30 03:24:23本篇文章主要介绍了java实现Object和Map之间的转换3种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
ObjectToMapUtil.java(Object对象转Map)
2021-08-16 16:40:50Java代码Object对象转Map -
java Map转Object与Object转Map实现代码
2020-08-31 11:16:31主要介绍了 java Map转Object与Object转Map实现代码的相关资料,需要的朋友可以参考下 -
MapToObjectUtil.java(Map转Object对象)
2021-08-16 16:39:37Java代码Map转Object对象 -
map和object相互转换的几种方法和对比
2019-11-06 17:03:00工作中经常遇到这样的场景,需要在object和map直接相互转换,这里总结一下。 我先定义一个实体类,后面介绍的几种转换方法都以这个实体类为例进行说明。 public class PersonBean { private String name; //姓名 ...工作中经常遇到这样的场景,需要在object和map直接相互转换,这里总结一下。
我先定义一个实体类,后面介绍的几种转换方法都以这个实体类为例进行说明。
public class PersonBean { private String name; //姓名 private Integer age; //年龄 private Boolean boy; //是否男孩 private Date birthday; //生日 }
这里尽量覆盖不同的属性类型,便于全面的测试转换方法。
第一种方法,利用反射
然后我们写个测试方法验证一下,
@Test public void test1() throws Exception { Map<String, Object> map = new HashMap<String, Object>(); map.put("name", "fcbox"); map.put("age", 15); map.put("boy", true); map.put("birthday", new Date()); PersonBean person = (PersonBean)map2Object_1(map, PersonBean.class); System.out.println("方法1 map->object的转换结果:" + person); Map<String, Object> newMap = Object2Map_1(person); System.out.println("方法1 object->map的转换结果:" + JSON.toJSONString(newMap)); }
输出,
方法1 map->object的转换结果:PersonBean(name=fcbox, age=15, boy=true, birthday=Wed Nov 06 14:52:57 CST 2019) 方法1 object->map的转换结果:{"birthday":1573023177881,"name":"fcbox","boy":true,"age":15}
然后我们接着做个测试,把
map.put("boy", true);
改成
map.put("boy", "true");
会报异常,
java.lang.IllegalArgumentException: Can not set java.lang.Boolean field com.pony.app.PersonBean.boy to java.lang.String at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167) at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171) at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81) at java.lang.reflect.Field.set(Field.java:758) at com.pony.test.Map2ObjectTest.map2Object_1(Map2ObjectTest.java:66) at com.pony.test.Map2ObjectTest.test1(Map2ObjectTest.java:33) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) 方法1 map->object的转换结果:PersonBean(name=fcbox, age=15, boy=null)
你可以先记住这个结论,继续往下看。
第二种方法,利用commons.BeanUtils
示例代码如下:
public static Object map2Object_2(Map<String, Object> map, Class<?> clazz) { if (map == null) { return null; } Object obj = null; try { obj = clazz.newInstance(); //这个方法会遍历map<key, value>中的key,如果bean中有这个属性,就把这个key对应的value值赋给bean的属性。 BeanUtils.populate(obj, map); } catch (Exception e) { e.printStackTrace(); } return obj; } public static Map<?, ?> Object2Map_2(Object object) { if (object == null) { return null; } return new BeanMap(object); }
测试方法,
@Test public void teste2(){ Map<String, Object> map = new HashMap<String, Object>(); map.put("name", "tom"); map.put("age", 15); map.put("boy", true); map.put("birthday", new Date()); PersonBean person = (PersonBean)map2Object_2(map, PersonBean.class); System.out.println("方法2 map->object的转换结果:" + person); Map<?, ?> newMap = Object2Map_2(person); System.out.println("方法2 object->map的转换结果:" + JSON.toJSONString(newMap)); }
输出,
方法2 map->object的转换结果:PersonBean(name=tom, age=15, boy=true, birthday=Wed Nov 06 14:53:47 CST 2019) 方法2 object->map的转换结果:{"birthday":1573023227193,"name":"tom","boy":true,"class":"com.pony.app.PersonBean","age":15}
然后像上个示例一样,把
map.put("boy", true);
改成
map.put("boy", "true");
你会发现依然可以正确的输出同样的结果。
从这点来看,beanutils比反射好用,它里面做了大量的转换工作,反射的方法更多需要你自己来处理。
第三种方法,json转换
这里使用 fastjson,其实用其它的组件也是可以的。
public static Object map2Object_3(Map<String, Object> map, Class<?> clazz) { if (map == null) { return null; } return JSON.parseObject(JSON.toJSONString(map), clazz); } public static Map<?, ?> Object2Map_3(Object object) { if (object == null) { return null; } return JSON.parseObject(JSON.toJSONString(object), Map.class); }
测试方法,
@Test public void test3(){ Map<String, Object> map = new HashMap<String, Object>(); map.put("name", "tom"); map.put("age", 15); map.put("boy", true); map.put("birthday", new Date()); PersonBean person = (PersonBean)map2Object_3(map, PersonBean.class); System.out.println("方法3 map->object的转换结果:" + person); Map<?, ?> newMap = Object2Map_3(person); System.out.println("方法3 object->map的转换结果:" + JSON.toJSONString(newMap)); }
输出,
方法3 map->object的转换结果:PersonBean(name=tom, age=15, boy=true, birthday=Wed Nov 06 15:30:47 CST 2019) 方法3 object->map的转换结果:{"birthday":1573025447719,"name":"tom","boy":true,"age":15}
json的方法似乎也不错,它的原理是先把map转成json,然后把json转成object。而且你可以测试下,它也是可以识别
map.put("boy", "true");
这种赋值方式的。性能问题
我在上面三个测试方法上增加耗时打印,发现三个方法的性能排名是:
方法1 > 方法3 > 方法2
也就是说,方法2最耗时。当然这个不是官方结论,只是我自己本地环境测试的结果。
-
Object 转Map,Map转Object方式总结
2022-03-16 11:35:16} 通过反射实现Map转Bean //Map转Object public static Object mapToObject(Map map, Class beanClass) throws Exception { if (map == null) return null; Object obj = beanClass.newInstance(); Field[] fields ...商品业务对象定义:Product
Product product = new Product(); product.setId(1L); product.setName("爱他美") product.setProductDt("2022-03-16")
第一种:通过Alibaba Fastjson实现:
pom.xml 文件依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.66</version> </dependency>
//Object转Map Map map = JSONObject.parseObject(JSONObject.toJSONString(product), Map.class); Map<String,Object> map = JSONObject.parseObject(JSON.toJSONString(product)); //Map转Object Product productDto1 = JSON.parseObject(JSON.toJSONString(map), Product.class); Product productDto2 = JSONObject.toJavaObject(JSON.toJSONString(map), Product.class);
第二种:通过SpringBoot自带 Jackso实现
一般情况下我们引入MVC,MVC里面帮我们引入了Jackso依赖
<!-- springboot web(MVC)--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
最终的依赖:
ObjectMapper mapper = new ObjectMapper(); //对象转map Map m = mapper.readValue(mapper.writeValueAsString(product), Map.class); //map转对象 Product dto = mapper.readValue(mapper.writeValueAsString(m), Product.class);
第三种:通过Apache common Bean工具类实现
Pom.xml文件依赖
<dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.9.3</version> </dependency>
#使用org.apache.commons.beanutils.BeanMap进行转换,实现Bean转Map Map<String, Object> map = new org.apache.commons.beanutils.BeanMap(product); #使用org.apache.commons.beanutils.BeanUtils将map转为对象 BeanUtils.populate(product, map);
第四种: 通过反射实现
通过反射实现Bean 转Map
//Object转Map public static Map<String, Object> getObjectToMap(Object obj) throws IllegalAccessException { Map<String, Object> map = new LinkedHashMap<String, Object>(); Class<?> clazz = obj.getClass(); System.out.println(clazz); for (Field field : clazz.getDeclaredFields()) { field.setAccessible(true); String fieldName = field.getName(); Object value = field.get(obj); if (value == null){ value = ""; } map.put(fieldName, value); } return map; }
通过反射实现Map转Bean
//Map转Object public static Object mapToObject(Map<Object, Object> map, Class<?> beanClass) throws Exception { if (map == null) return null; Object obj = beanClass.newInstance(); Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { int mod = field.getModifiers(); if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) { continue; } field.setAccessible(true); if (map.containsKey(field.getName())) { field.set(obj, map.get(field.getName())); } } return obj; }
-
【java】之3种方式实现Object和Map之间的转换
2021-10-12 18:54:37转载:【java】之3种方式实现Object和Map之间的转换 - 古越剑箫 - 博客园 -
java实现map和object互转的三种方法
2018-08-16 17:56:51/** * 使用org.apache.commons.beanutils进行转换 ... public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception { if (m... -
java object互转Map的三种方法
2017-06-14 16:56:09原文:http://www.open-open.com/code/view/1423280939826 /** * 使用org.apache.commons.beanutils进行转换 */ class A { public static Object mapToObject(Map map, Class beanClass) throws Except -
Object转成map对象
2021-04-07 16:54:261、Object转换成map的方法 import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; /** * 将Object对象里面的属性和值转化成Map对象 * * @param obj * @return * @throws ... -
Java中Object转换为List类型
2020-05-19 15:57:33在很多项目编写过程中会使用Map<?>类型来进行参数的传递。为了能够让更多的类型放入value中,实例化的类型往往是Map<String, Object>来存放数据。 解析数据的时候map.get(key)所获取到的类型为Object。... -
java Map转Object Object转Map
2017-01-05 16:10:012、Map转Object转换如下: package reflect; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.HashMap; ... -
Object转Map和Map转Object(对象转map,map转对象)
2019-05-09 10:06:20第一种方法:fastJosn import com.alibaba.fastjson.JSON; import ... Object转Map FindArchiveDto findArchiveDto = new FindArchiveDto(); findArchiveDto.setContractStatus("降龙"); ... -
Java 字符串转Map
2021-11-15 14:46:221.对于JSON格式的字符串转map: 使用fastJSON String str ="{ \"gradle\":\"高一\", \"number\":\"2\",\"name\":\"张三\",\"age\":\"15\" }"; Map<String, Object> map = JSONObject.parseObject(str, new ... -
java 对象Object转Map / Json
2019-10-18 10:39:51在项目中我们传值时,常常需要把对象集合转成Json集合进行传递。可用如下代码来进行转换: @Test public void test() throws Exception { List<JSONObject> dataJson = getDataJson(); System.out.... -
Java小知识:Object对象 与 map 相互转换
2020-04-10 12:32:33废话不说,直接上源码 public static Map<String, String> convertToMap(Object obj) { try { if (obj instanceof Map) { return (Map)obj; } Map<String, String> retur... -
java-将Map ,Object>转换为Map ,String>
2021-03-06 01:46:47//Object is containing StringMap newMap =new HashMap(map);11个解决方案37 votes现在我们有了Java 8 / streams,我们可以在列表中添加一个可能的答案:假设每个值实际上都是String对象,则强制转换为... -
Java中 如何把Object类型强转成Map, String>类型
2021-03-13 20:57:58首先你需要保证要转换的Object的实际类型是Map假设Object变量名为obj,强制转换(Map)obj转换前...追答方法上面加注解@SuppressWarnings("unchecked")能这么转的前提是 你的object对象真的是一个 Map 要不也是转不过... -
java中实现map与对象相互转换的几种实现
2021-02-12 10:02:12最近,研究map与java对象之间的相互转换,总结了5种方法:第一种:使用org.apache.commons.beanutils转换用到的主要jar包:commons-beanutils-1.9.3.jar//map转java对象public static Object mapToObject(Map map, ... -
java Map和Object互转的三种方法,
2018-01-23 18:03:30用过第二种,不错,但是尤其注意,因为这是实体与map的转换,如果实体没有的字段,转成map之后是不会有相应的字段的,只能手动set了 /** * 使用org.apache.commons.beanutils进行转换 */ class A... -
string 转 java对象、转map的方式
2021-03-06 01:15:451、使用fastJson 将String转 map:String out;... //先转换成ObjectMap map = (Map)succesResponse; //Object强转换为Map2、String 转 java 对象fastjson 应用 string字符串转换成java对象或者对象数... -
Java中将Map转String,String转Map
2022-04-03 20:44:27String转Map: JSONObject jsonobject = JSONObject.fromObject(str); rMap = (Map<String, Object>) jsonobject; 但很多时候并不能直接将Map对象的toString() 而是应该转换为JsonObject后再调用toString()后... -
object转map,object转jsonArray
2020-12-03 14:15:26相信在调用一些接口时,拿到的是一些字符串,更好的操作这些数据,我们需要相应的转换: 用阿里的包 <dependency> <groupId>com.alibaba</groupId>...object转map Object jsonObj; -
Java String转Map
2021-07-10 11:02:32String 转 Map string 转 map的时候,很多新人可能不会去判断string的内容是什么格式的,因为map是key-value格式的,但是string就是一个字符串,想想,这个应该不能转吧,我就遇到过, 想想就觉得自己傻傻的,哈哈... -
Java JSON转换为map
2022-06-13 11:25:58json转map的六种方式 -
java Map与Object互转
2017-07-07 15:43:50/*** * map转换成对象 */ public static Object mapToObject(Map, Object> map, Class<?> beanClass) throws Exception { if (map == null) return null; Ob