Jackson库使用教程

发布于:2024-07-05 ⋅ 阅读:(20) ⋅ 点赞:(0)
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-corejackson-annotationsjackson-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注解等。