精华内容
下载资源
问答
  • java中object转map
    千次阅读
    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类完成ObjMap之间的相互转换.

    • ObjectMap类型
    //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;
    }
    
    • MapObject类型
    //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实现ObjectMap之间的转换3种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Java代码Object对象转Map
  • 主要介绍了 java Map转ObjectObject转Map实现代码的相关资料,需要的朋友可以参考下
  • Java代码Map转Object对象
  • 工作经常遇到这样的场景,需要在objectmap直接相互转换,这里总结一下。 我先定义一个实体类,后面介绍的几种转换方法都以这个实体类为例进行说明。 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 转MapMap转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种方式实现ObjectMap之间的转换 - 古越剑箫 - 博客园
  • java实现mapobject的三种方法

    千次阅读 2018-08-16 17:56:51
    /** * 使用org.apache.commons.beanutils进行转换 ... public static Object mapToObject(Map&lt;String, Object&gt; map, Class&lt;?&gt; 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:26
    1、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:01
    2、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转MapMap转Object(对象转mapmap转对象)

    万次阅读 多人点赞 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:22
    1.对于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....
  • 废话不说,直接上源码 public static Map<String, String> convertToMap(Object obj) { try { if (obj instanceof Map) { return (Map)obj; } Map<String, String> retur...
  • java-将MapObject>转换为Map ,String>

    千次阅读 2021-03-06 01:46:47
    //Object is containing StringMap newMap =new HashMap(map);11个解决方案37 votes现在我们有了Java 8 / streams,我们可以在列表添加一个可能的答案:假设每个值实际上都是String对象,则强制转换为...
  • 首先你需要保证要转换的Object的实际类型是Map假设Object变量名为obj,强制转换(Map)obj转换前...追答方法上面加注解@SuppressWarnings("unchecked")能这么的前提是 你的object对象真的是一个 Map 要不也是不过...
  • 最近,研究mapjava对象之间的相互转换,总结了5种方法:第一种:使用org.apache.commons.beanutils转换用到的主要jar包:commons-beanutils-1.9.3.jar//map转java对象public static Object mapToObject(Map map, ...
  • java MapObject的三种方法,

    万次阅读 2018-01-23 18:03:30
    用过第二种,不错,但是尤其注意,因为这是实体与map的转换,如果实体没有的字段,map之后是不会有相应的字段的,只能手动set了 /**   * 使用org.apache.commons.beanutils进行转换   */  class A...
  • string java对象、转map的方式

    千次阅读 2021-03-06 01:15:45
    1、使用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:27
    String转Map: JSONObject jsonobject = JSONObject.fromObject(str); rMap = (Map<String, Object>) jsonobject; 但很多时候并不能直接将Map对象的toString() 而是应该转换为JsonObject后再调用toString()后...
  • object转mapobject转jsonArray

    千次阅读 2020-12-03 14:15:26
    相信在调用一些接口时,拿到的是一些字符串,更好的操作这些数据,我们需要相应的转换: 用阿里的包 <dependency> <groupId>com.alibaba</groupId>...object转map Object jsonObj;
  • Java String转Map

    千次阅读 2021-07-10 11:02:32
    String Map string map的时候,很多新人可能不会去判断string的内容是什么格式的,因为map是key-value格式的,但是string就是一个字符串,想想,这个应该不能转吧,我就遇到过, 想想就觉得自己傻傻的,哈哈...
  • Java JSON转换为map

    千次阅读 2022-06-13 11:25:58
    json转map的六种方式
  • java MapObject

    千次阅读 2017-07-07 15:43:50
    /*** * map转换成对象 */ public static Object mapToObject(Map, Object> map, Class<?> beanClass) throws Exception { if (map == null) return null; Ob

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 692,945
精华内容 277,178
关键字:

java中object转map