如何将Object转换为Map<String, String>
其中key
是obj.parameter.name
,而value
是obj.parameter.value
例如:Object obj = new myObject("Joe", "Doe");
转换为Map
,其键为:名称,姓氏和值:Joe,Doe。
答案 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}