在 Java 开发中,有时需要将对象转为 Map,以下是几种方式。
一、Java 对象示例。
package com.test.controller;
import lombok.Data;
@Data
public class Student {
private String name;
private String sex;
}
二、对象转为 Map 的几种方式
2.1 使用 Jackson
可以先将对象序列化为 JSON 字符串,然后再将该字符串反序列化为 Map 对象。
package com.test.controller;
import org.codehaus.jackson.map.ObjectMapper;
import java.io.IOException;
import java.util.Map;
public class Test {
public static void main(String[] args) {
try {
Student student = new Student();
student.setName("张三");
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(student);
Map<String, Object> tmpMap = mapper.readValue(jsonString, Map.class);
System.out.println(tmpMap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果如下。
{name=张三, sex=null}
2.2 使用 Gson
package com.test.controller;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Student student = new Student();
student.setName("张三");
Gson gson = new Gson();
Type targetType = new TypeToken<Map<String, String>>() {
}.getType();
Map<String, String> tmpMap = gson.fromJson(gson.toJson(student), targetType);
System.out.println(tmpMap);
}
}
运行结果如下。
{name=张三}
2.3 使用 Guava
Guava 不直接支持对象到 Map 的转换,需要手动创建 Map 并填充数据。
package com.test.controller;
import com.google.common.collect.Maps;
import java.lang.reflect.Field;
import java.util.Map;
public class Test {
public static void main(String[] args) {
try {
Student student = new Student();
student.setName("张三");
Map<String, Object> tmpMap = Maps.newHashMap();
for (Field field : student.getClass().getDeclaredFields()) {
field.setAccessible(true);
tmpMap.put(field.getName(), field.get(student));
}
System.out.println(tmpMap);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
运行结果如下。
{sex=null, name=张三}
2.4 使用 Hutool
Hutool 有一个 BeanUtil 类可以直接将对象转换为 Map。
package com.test.controller;
import cn.hutool.core.bean.BeanUtil;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Student student = new Student();
student.setName("张三");
Map<String, Object> tmpMap = BeanUtil.beanToMap(student);
System.out.println(tmpMap);
}
}
运行结果如下。
{name=张三, sex=null}