1. Jackson概述
- 定義: Jackson是一個基于Java的開源JSON解析工具,用于Java對象與JSON數據的互相轉換。
- 示例JSON:
{"author": "一路向北_Coding","age": 20,"hobbies": ["coding", "leetcode", "reading"] }
- Java類示例:
class Blog {private String author;private int age;private String[] hobbies; }
2. Jackson的優勢
- 社區活躍: 更新迭代快,社區支持好。
- 流行度: 根據Github統計,Jackson是最流行的序列化工具之一。
- 依賴少: 穩定性強,API豐富。
- Spring默認: Jackson是Spring系列的默認JSON解析器。
3. Jackson使用入門
- 引入依賴: Maven項目中添加
jackson-core
、jackson-annotations
和jackson-databind
依賴。Spring項目只需引入spring-boot-starter-web
。 - API封裝: 將Jackson API封裝為工具類,便于使用。
4. Jackson常用API
- Java對象轉JSON:
public static String toString(Object obj, String default) {try {return MAPPER.writeValueAsString(obj);} catch (JsonProcessingException e) {LOGGER.error("toString error" + e.getMessage());return default;} }
- JSON轉Java對象:
- 帶泛型:
public static <T> T toObject(String jsonString, TypeReference<T> typeReference) {return toObject(jsonString, null, typeReference); }
- 不帶泛型:
public static <T> T toObject(String jsonString, T default, Class<T> clazz) {try {return MAPPER.readValue(jsonString, clazz);} catch (Exception e) {LOGGER.error("toObject error:" + e.getMessage());return default;} }
- 帶泛型:
- JSON反序列化為List:
public static <T> List<T> ofList(String jsonString, Class<T> clazz) {if (StringUtil.isBlank(jsonString)) {return null;}CollectionType javaType = MAPPER.getTypeFactory().constructCollectionType(List.class, clazz);try {return MAPPER.readValue(jsonString, javaType);} catch (JsonProcessingException e) {LOGGER.error("toList error:" + e.getMessage());return null;} }
- JSON反序列化為Map:
public static <K, V> Map<K, V> ofMap(String jsonString, Class<K> keyClazz, Class<V> valueClazz) {if (StringUtil.isBlank(jsonString)) {return null;}MapType javaType = MAPPER.getTypeFactory().constructMapType(Map.class, keyClazz, valueClazz);try {return MAPPER.readValue(jsonString, javaType);} catch (JsonProcessingException e) {LOGGER.error("ofMap:" + e.getMessage(), e);return null;} }
5. 總結
- Jackson除了基本的序列化和反序列化功能外,還有更多高級用法,如
JsonNode
模型、Jackson注解等。