基于Jackson的Json工具类

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;

@Slf4j
public class JsonUtil {
   

    public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();

    static {
   
        // 对象的所有字段全部列入序列化
        OBJECT_MAPPER.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        // 取消默认转换timestamps形式
        OBJECT_MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        // 忽略空Bean转json的错误
        OBJECT_MAPPER.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        // 忽略 在json字符串中存在,但在java对象中不存在对应属性的情况。防止错误
        OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        // 所有的日期格式都统一为以下的格式,即yyyy-MM-dd HH:mm:ss
        OBJECT_MAPPER.setDateFormat(new SimpleDateFormat(CommonConstant.DATETIME_FORMAT_FORMAT));
        // 兼容时间格式
        JavaTimeModule module = new JavaTimeModule();
        module.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(
                      DateTimeFormatter.ofPattern(CommonConstant.DATETIME_FORMAT_FORMAT)))
              .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(
                      DateTimeFormatter.ofPattern(CommonConstant.DATETIME_FORMAT_FORMAT)))
              .addSerializer(LocalDate.class,
                             new LocalDateSerializer(DateTimeFormatter.ofPattern(CommonConstant.DATE_DEFAULT_FORMAT)))
              .addDeserializer(LocalDate.class, new LocalDateDeserializer(
                      DateTimeFormatter.ofPattern(CommonConstant.DATE_DEFAULT_FORMAT))).addDeserializer(LocalTime.class,
                                                                                                        new LocalTimeDeserializer(
                                                                                                                DateTimeFormatter.ofPattern(
                                                                                                                        CommonConstant.TIME_DEFAULT_FORMAT)))
              .addSerializer(LocalTime.class,
                             new LocalTimeSerializer(DateTimeFormatter.ofPattern(CommonConstant.TIME_DEFAULT_FORMAT)));
        OBJECT_MAPPER.registerModule(module);
    }

    public static ObjectMapper getObjectMapper() {
   
        return OBJECT_MAPPER;
    }

    public static <T> T parseObject(String jsonString, Class<T> clazz) {
   
        try {
   
            return OBJECT_MAPPER.readValue(jsonString, clazz);
        } catch (JsonProcessingException e) {
   
            throw new SystemException("JsonString转为自定义对象失败", e);
        }
    }

    public static <T> T parseObject(File file, Class<T> clazz) {
   
        try {
   
            return OBJECT_MAPPER.readValue(file, clazz);
        } catch (IOException e) {
   
            throw new SystemException("从文件中读取json字符串转为自定义对象失败", e);
        }
    }

    public static <T> T[] parseObjectArray(String jsonString, Class<T> clazz) {
   
        try {
   
            return OBJECT_MAPPER.readerForArrayOf(clazz).readValue(jsonString);
        } catch (JsonProcessingException e) {
   
            throw new SystemException("JsonString转为Array失败", e);
        }
    }

    public static <T> List<T> parseObjectList(String jsonString, Class<T> clazz) {
   
        try {
   
            return OBJECT_MAPPER.readerForListOf(clazz).readValue(jsonString);
        } catch (JsonProcessingException e) {
   
            throw new SystemException("JsonString转为List失败", e);
        }
    }

    public static <T> Map<String, T> parseObjectMap(String jsonString, Class<T> clazz) {
   
        try {
   
            return OBJECT_MAPPER.readerForMapOf(clazz).readValue(jsonString);
        } catch (JsonProcessingException e) {
   
            throw new SystemException("JsonString转为Map失败", e);
        }
    }

    public static <T> T parseObject(String jsonString, TypeReference<T> reference) {
   
        try {
   
            return OBJECT_MAPPER.readValue(jsonString, reference);
        } catch (JsonProcessingException e) {
   
            throw new SystemException("JsonString转换Object失败", e);
        }
    }

    public static String toJsonString(Object object) {
   
        try {
   
            return OBJECT_MAPPER.writeValueAsString(object);
        } catch (JsonProcessingException e) {
   
            throw new SystemException("Object转JSONString失败", e);
        }
    }

    public static byte[] toByteArray(Object object) {
   
        try {
   
            return OBJECT_MAPPER.writeValueAsBytes(object);
        } catch (JsonProcessingException e) {
   
            throw new SystemException("Object转ByteArray失败", e);
        }
    }

    public static void objectToFile(File file, Object object) {
   
        try {
   
            OBJECT_MAPPER.writeValue(file, object);
        } catch (Exception e) {
   
            throw new SystemException("Object写入文件失败", e);
        }
    }

    public static JsonNode parseJsonObject(String jsonString) {
   
        try {
   
            return OBJECT_MAPPER.readTree(jsonString);
        } catch (JsonProcessingException e) {
   
            throw new SystemException("JsonString转为JsonNode失败", e);
        }
    }

    public static JsonNode parseJsonObject(Object object) {
   
        return OBJECT_MAPPER.valueToTree(object);
    }

    public static String toJsonString(JsonNode jsonNode) {
   
        try {
   
            return OBJECT_MAPPER.writeValueAsString(jsonNode);
        } catch (JsonProcessingException e) {
   
            throw new SystemException("JsonNode转JSONString失败", e);
        }
    }

    public static ObjectNode newJsonObject() {
   
        return OBJECT_MAPPER.createObjectNode();
    }

    public static ArrayNode newJsonArray() {
   
        return OBJECT_MAPPER.createArrayNode();
    }

}

相关推荐

  1. 基于JacksonJson工具

    2024-01-19 15:16:01       29 阅读
  2. Jackson指定jsonkey

    2024-01-19 15:16:01       5 阅读
  3. 【lesson3】服务端Json工具设计和实现

    2024-01-19 15:16:01       8 阅读
  4. 基于EasyExcel实现动态表头工具

    2024-01-19 15:16:01       39 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-19 15:16:01       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-19 15:16:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-19 15:16:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-19 15:16:01       18 阅读

热门阅读

  1. Kotlin 协程 asyn和launch简单使用

    2024-01-19 15:16:01       35 阅读
  2. Kotlin学习第1篇——data class

    2024-01-19 15:16:01       36 阅读
  3. React16源码: React中的FunctionComponent的源码实现

    2024-01-19 15:16:01       30 阅读
  4. Kotlin协程的JVM实现源码分析(上)

    2024-01-19 15:16:01       33 阅读
  5. C生万物呀

    2024-01-19 15:16:01       34 阅读
  6. BAPI_ALM_ORDER_MAINTAIN -- 创建维修工单

    2024-01-19 15:16:01       26 阅读
  7. c++位运算

    2024-01-19 15:16:01       30 阅读
  8. python第三节:Str字符串类型(8)

    2024-01-19 15:16:01       33 阅读
  9. redis

    redis

    2024-01-19 15:16:01      29 阅读