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注解等。