Don’t say much, just go to the code.
Maven
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.60</version>
</dependency>
package org.bood.common.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;
import com.alibaba.fastjson.serializer.ValueFilter;
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;
/**
* Alibaba - JSON 工具类
*
* @author bood
* @since 2024/01/31
*/
public class JsonUtils {
private JsonUtils() {
}
private static final SerializeConfig serializeConfig = new SerializeConfig();
private static final SerializerFeature[] serializerFeatures = {
// 解决循环引用问题
SerializerFeature.DisableCircularReferenceDetect,
// 输出null字段
SerializerFeature.WriteMapNullValue
};
static {
serializeConfig.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
serializeConfig.put(Timestamp.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
}
/**
* 值过滤器,用于处理null值转换为""
*/
private static final ValueFilter valueFilter = (obj, s, v) -> (v == null) ? "" : v;
/**
* 将对象转换为 JSON 字符串,使用默认日期格式 "yyyy-MM-dd HH:mm:ss"
*
* @param object 待转换的对象,如BO/VO,Map,数组,List
* @return {@link String }
* @author bood
* @since 2024/01/31
*/
public static String toJSONString(Object object) {
return toJSONString(object, serializeConfig);
}
/**
* 使用指定日期格式将对象转换为 JSON 字符串
*
* @param object 待转换的对象
* @param dateType 指定日期格式,如 "yyyy-MM-dd HH:mm:ss"
* @return {@link String }
* @author bood
* @since 2024/01/31
*/
public static String toJSONString(Object object, String dateType) {
SerializeConfig config = new SerializeConfig();
config.put(Date.class, new SimpleDateFormatSerializer(dateType));
return toJSONString(object, config);
}
/**
* 将 JSON 字符串转换为指定类型的对象
*
* @param json JSON 字符串
* @param clazz 待转换对象的类类型
* @return {@link T }
* @author bood
* @since 2024/01/31
*/
public static <T> T parseObject(String json, Class<T> clazz) {
return JSON.parseObject(json, clazz);
}
/**
* 将 JSON 字符串转换为指定类型的对象列表
*
* @param json JSON 字符串
* @param clazz 待转换对象的类类型
* @return {@link List }<{@link T }>
* @author bood
* @since 2024/01/31
*/
public static <T> List<T> parseArray(String json, Class<T> clazz) {
return JSON.parseArray(json, clazz);
}
/**
* 将 JSON 字符串转换为 JSONObject 对象
*
* @param json JSON 字符串
* @return {@link JSONObject }
* @author bood
* @since 2024/01/31
*/
public static JSONObject parseJSONObject(String json) {
return JSON.parseObject(json);
}
/**
* 通用封装 - 获取 JSON 字符串,处理 key 为小写和特殊字符转义
*
* @param object 待转换的对象
* @param config 自定义序列化配置
* @return {@link String }
* @author bood
* @since 2024/01/31
*/
private static String toJSONString(Object object, SerializeConfig config) {
String json = JSON.toJSONString(object, config, valueFilter, serializerFeatures);
json = escapeSpecialCharacters(json);
// 所有 Key 转为小写(如果需要)
return json;
}
/**
* 转义 JSON 字符串中的特殊字符
*
* @param input 原始字符串
* @return {@link String }
* @author bood
* @since 2024/01/31
*/
private static String escapeSpecialCharacters(String input) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
switch (c) {
// case '\"': sb.append("\\\""); break;
case '\\':
sb.append("\\\\");
break;
case '/':
sb.append("\\/");
break;
case '\b':
sb.append("\\b");
break;
case '\f':
sb.append("\\f");
break;
case '\n':
sb.append("\\n");
break;
case '\r':
sb.append("\\r");
break;
case '\t':
sb.append("\\t");
break;
default:
sb.append(c);
}
}
return sb.toString();
}
}