将对象转换为Java中的地图

时间:2018-09-19 12:59:58

标签: java

如何将Object转换为Map<String, String> 其中keyobj.parameter.name,而valueobj.parameter.value

例如:Object obj = new myObject("Joe", "Doe");转换为Map,其键为:名称,姓氏和值:Joe,Doe。

2 个答案:

答案 0 :(得分:1)

这是您的操作方式:

import java.util.Map;
import java.util.HashMap;
import java.util.Map.Entry;
import java.lang.reflect.Field;

public class Main {
    public int a = 3;
    public String b = "Hello";

    public static void main(String[] args) {
        Map<String, Object> map = parameters(new Main());
        for (Entry<String, Object> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }

    public static Map<String, Object> parameters(Object obj) {
        Map<String, Object> map = new HashMap<>();
        for (Field field : obj.getClass().getDeclaredFields()) {
            field.setAccessible(true);
            try { map.put(field.getName(), field.get(obj)); } catch (Exception e) { }
        }
        return map;
    }
}

基本上,您可以使用反射来获取类中的所有字段。然后,您访问对象的所有这些字段。请记住,这仅适用于可通过获取字段的方法访问的字段。

答案 1 :(得分:0)

除了使用反射的技巧解决方案之外,您还可以尝试使用一行jackson,如下所示:

objectMapper.convertValue(o, Map.class);

一个测试用例:

    @Test
    public void testConversion() {
        User user = new User();
        System.out.println(MapHelper.convertObject(user));
    }

    @Data
    static class User {
        String name = "Jack";
        boolean male = true;
    }


// output: you can have the right type normally
// {name=Jack, male=true}