LiiuZeYu_branch
lzy 1 year ago
parent 089bb1f584
commit 0badd3fdcf

@ -0,0 +1,148 @@
/*
* Copyright (c) 2018-2999 广 All rights reserved.
*
* https://www.mall4j.com/
*
*
*
*
*/
package com.yami.shop.common.util;
// 导入Jackson相关的注解和类用于配置JSON序列化和反序列化过程中的一些行为比如包含哪些属性、如何处理未知属性等
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.json.JsonWriteFeature;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
// 导入Lombok的日志记录相关注解用于简化日志记录代码自动生成名为log的日志记录对象
import lombok.extern.slf4j.Slf4j;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* JsonJackson便JSON
* JavaJSONJSONJavaJSON
* JacksonObjectMapperJSON
*
* @author lanhai
*/
@Slf4j
public class Json {
// 创建一个静态的ObjectMapper实例ObjectMapper是Jackson库中用于进行JSON序列化和反序列化的核心类后续所有的JSON操作都基于它来实现
private static ObjectMapper objectMapper = new ObjectMapper();
// 静态代码块用于对ObjectMapper实例进行一系列的配置这些配置会影响JSON序列化和反序列化的行为。
static {
// 设置序列化时的包含规则这里配置为JsonInclude.Include.NON_EMPTY表示如果属性值为空比如null、空字符串、空集合等则不输出该属性到JSON字符串中减少不必要的JSON数据量。
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
// 配置在序列化时对于空的Java对象没有任何属性值的对象转JSON的时候不抛出错误而是正常返回一个空的JSON对象如 {}),增强程序的健壮性,避免因空对象序列化失败导致整个操作中断。
objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
// 禁用将日期类型属性序列化为时间戳的功能,这样在处理日期类型数据时可以按照更符合业务需求的日期格式(比如特定的字符串格式)进行序列化,而不是默认的时间戳形式。
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
// 禁用在反序列化时遇到未知属性即JSON字符串中的属性在对应的Java类中不存在定义抛出异常的功能这样即使JSON数据有额外的属性也能尽量解析出已知的属性值避免因未知属性导致整个反序列化失败。
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
// 取消对非ASCII字符的转码操作使得JSON字符串中可以直接包含如中文等非ASCII字符而不需要进行转义编码方便查看和处理更符合实际业务场景中对中文等字符的使用需求。
objectMapper.configure(JsonWriteFeature.ESCAPE_NON_ASCII.mappedFeature(), false);
}
/**
* JavaJSON
* ObjectMapperwriteValueAsStringJSON
* null
*
* @param object JSONJavaJacksonPOJO
* @return String JSONnull
*/
public static String toJsonString(Object object) {
try {
return objectMapper.writeValueAsString(object);
} catch (JsonProcessingException e) {
// 记录对象转JSON时出现的错误日志方便后续排查问题这里记录了异常的详细信息通过传入e作为参数
log.error("对象转json错误", e);
}
return null;
}
/**
* JSONJava
* ObjectMapperreadValueclazzJSONJava
* JSONnull
*
*
* @param json JSONJavaJackson
* @param clazz JavaObjectMapperJSON
* @return <T> Javaclazznull
*/
public static <T> T parseObject(String json, Class<T> clazz) {
T result = null;
try {
result = objectMapper.readValue(json, clazz);
} catch (Exception e) {
// 记录JSON转对象时出现的错误日志方便后续排查问题这里记录了异常的详细信息通过传入e作为参数
log.error("对象转json错误", e);
}
return result;
}
/**
* ObjectMapperJSON
* JSON使JSON
*
* @return ObjectMapper ObjectMapperJSON
*/
public static ObjectMapper getObjectMapper() {
return objectMapper;
}
/**
* JSONJavaList
* ObjectMapperreadValueJSONclazz
* ListnullList
* 便
* 使TypeReference10
*
* @param json JSONJavaJSON
* @param clazz JavaObjectMapperJSONMyClass[].class
* @return <T> JavaclazzList
*/
public static <T> List<T> parseArray(String json, Class<T[]> clazz) {
T[] result = null;
try {
result = objectMapper.readValue(json, clazz);
} catch (Exception e) {
// 记录JSON转换时出现的错误日志方便后续排查问题这里记录了异常的详细信息通过传入e作为参数
log.error("Json转换错误", e);
}
if (result == null) {
return Collections.emptyList();
}
return Arrays.asList(result);
}
/**
* JSONJsonNodeJsonNodeJSON便JSON
* JSONJSONMap
* null
*
* @param jsonStr JsonNodeJSONJSON
* @return JsonNode JsonNodenullJSON
*/
public static JsonNode parseJson(String jsonStr) {
JsonNode jsonNode = null;
try {
jsonNode = objectMapper.readTree(jsonStr);
} catch (Exception e) {
// 记录JSON转换时出现的错误日志方便后续排查问题这里记录了异常的详细信息通过传入e作为参数
log.error("Json转换错误", e);
}
return jsonNode;
}
}
Loading…
Cancel
Save