# SpringBoot - 使用 ObjectMapper 完成 json 和 Java Object 互相轉換
### ObjectMapper 是一款非常好用的 json 轉換工具,可以幫助我們完成 json 和 Java 的 Object 的互相轉換
### 什麼是 Serialize 和 Deserialize?
- Serialize : 將 Java Object 轉換成 json
- Deserialize : 將 json 轉換成 Java Object
### 在 Spring Boot 裡使用 ObjectMapper
ObjectMapper 是由 Jackson library 所提供的一個功能,所以只要在 maven 中加入 spring-boot-starter-web 的 dependency 就可以了
```=\
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
```
### Json 和 Java Object、List、Map 的互轉
```java=\
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JSONUtils {
private static final Logger log = LogManager.getLogger(JSONUtils.class);
/**
* 將物件轉成JSon String
* @param value
* @return
*/
public static String toJSONString(Object value)
{
try
{
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(value);
}
catch (Exception e)
{
log.debug("toJSONString fail, Object=" + value, e);
return null;
}
}
/**
* 將JSon String轉成物件
* @param jsonString
* @param object
* @return
*/
public static <T> T fromJSONString(String jsonString, Class<T> object)
{
if (jsonString == null || object == null)
{
log.warn("fromJSONString format error");
return null;
}
try
{
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(jsonString, object);
}
catch (Exception e)
{
log.debug("fromJSONString fail, jsonString=" + jsonString + ", object=" + object, e);
return null;
}
}
/**
* 將Map<String, Object>轉成JSon String
*
*/
public static String readMapToJSON(HashMap<String, Object> map)
{
if (map == null || map.isEmpty() )
{
log.warn("readMaptoJSON format error");
return null;
}
try
{
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(map);
}
catch (Exception e)
{
log.debug("readMaptoJSON fail, map= " + map, e);
return null;
}
}
/**
* 將JSon String轉成Map<String, Object>
*
*/
public static Map<String, Object> readJSONtoMap(String jsonString)
{
if (jsonString == null || jsonString.trim().length() == 0)
{
log.warn("readJSONtoMap format error");
return null;
}
try
{
ObjectMapper mapper = new ObjectMapper();
TypeReference<HashMap<String, Object>> typeRef = new TypeReference<HashMap<String, Object>>(){};
return mapper.readValue(jsonString, typeRef);
}
catch (Exception e)
{
log.debug("readJSONtoMap fail, jsonString=" + jsonString, e);
return null;
}
}
/**
* 將List<Object>轉成JSon String
*
*/
public static String readListToJSON(List<Object> list)
{
if (list == null || list.isEmpty() )
{
log.warn("readListToJSON format error");
return null;
}
try
{
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(list);
}
catch (Exception e)
{
log.debug("readListToJSON fail, list=" + list, e);
return null;
}
}
/**
* 將JSon String轉成 List<Object>
*
*/
public static List< Object> readJSONtoList(String jsonString)
{
if (jsonString == null || jsonString.trim().length() == 0)
{
log.warn("readJSONtoList format error");
return null;
}
try
{
ObjectMapper mapper = new ObjectMapper();
TypeReference<List< Object>> typeRef = new TypeReference<List< Object>>(){};
return mapper.readValue(jsonString, typeRef);
}
catch (Exception e)
{
log.debug("readJSONtoList fail, jsonString=" + jsonString, e);
return null;
}
}
}
```