123 lines
3.2 KiB
Kotlin
123 lines
3.2 KiB
Kotlin
package com.sw.inbound.utils
|
|
|
|
import com.google.gson.Gson
|
|
import com.google.gson.GsonBuilder
|
|
import com.google.gson.reflect.TypeToken
|
|
import java.lang.reflect.Type
|
|
|
|
object GsonUtils {
|
|
|
|
// 默认的 Gson 实例
|
|
private val defaultGson: Gson by lazy {
|
|
GsonBuilder()
|
|
.setDateFormat("yyyy-MM-dd HH:mm:ss") // 设置日期格式
|
|
// .disableHtmlEscaping() // 禁止转义HTML标签
|
|
.create()
|
|
}
|
|
|
|
/**
|
|
* 获取默认配置的 Gson 实例
|
|
*/
|
|
fun getGson(): Gson = defaultGson
|
|
|
|
/**
|
|
* 将对象转换为 JSON 字符串
|
|
* @param obj 要转换的对象
|
|
* @return JSON 字符串
|
|
*/
|
|
fun toJson(obj: Any?): String {
|
|
return if (obj == null) "" else defaultGson.toJson(obj)
|
|
}
|
|
|
|
/**
|
|
* 将 JSON 字符串转换为对象
|
|
* @param json JSON 字符串
|
|
* @param clazz 目标类
|
|
* @return 转换后的对象
|
|
*/
|
|
fun <T> fromJson(json: String?, clazz: Class<T>): T? {
|
|
if (json.isNullOrEmpty()) {
|
|
return null
|
|
}
|
|
return try {
|
|
defaultGson.fromJson(json, clazz)
|
|
} catch (e: Exception) {
|
|
e.printStackTrace()
|
|
null
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 将 JSON 字符串转换为对象 (支持泛型)
|
|
* @param json JSON 字符串
|
|
* @param type 类型令牌,用于获取泛型类型
|
|
* @return 转换后的对象
|
|
*/
|
|
fun <T> fromJson(json: String?, type: Type): T? {
|
|
if (json.isNullOrEmpty()) {
|
|
return null
|
|
}
|
|
return try {
|
|
defaultGson.fromJson(json, type)
|
|
} catch (e: Exception) {
|
|
e.printStackTrace()
|
|
null
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 将 JSON 字符串转换为 List 对象
|
|
* @param json JSON 字符串
|
|
* @param clazz List 中的元素类型
|
|
* @return 转换后的 List 对象
|
|
*/
|
|
fun <T> fromJsonList(json: String?, clazz: Class<T>): List<T>? {
|
|
if (json.isNullOrEmpty()) {
|
|
return null
|
|
}
|
|
return try {
|
|
val type = TypeToken.getParameterized(List::class.java, clazz).type
|
|
defaultGson.fromJson<List<T>>(json, type)
|
|
} catch (e: Exception) {
|
|
e.printStackTrace()
|
|
null
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 将 JSON 字符串转换为 Map 对象
|
|
* @param json JSON 字符串
|
|
* @param keyClazz Map 的 key 类型
|
|
* @param valueClazz Map 的 value 类型
|
|
* @return 转换后的 Map 对象
|
|
*/
|
|
fun <K, V> fromJsonMap(
|
|
json: String?,
|
|
keyClazz: Class<K>,
|
|
valueClazz: Class<V>
|
|
): Map<K, V>? {
|
|
if (json.isNullOrEmpty()) {
|
|
return null
|
|
}
|
|
return try {
|
|
val type = TypeToken.getParameterized(Map::class.java, keyClazz, valueClazz).type
|
|
defaultGson.fromJson<Map<K, V>>(json, type)
|
|
} catch (e: Exception) {
|
|
e.printStackTrace()
|
|
null
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 将对象转换为另一种类型的对象
|
|
* @param obj 源对象
|
|
* @param clazz 目标类型
|
|
* @return 转换后的对象
|
|
*/
|
|
fun <T> convert(obj: Any?, clazz: Class<T>): T? {
|
|
if (obj == null) {
|
|
return null
|
|
}
|
|
return fromJson(toJson(obj), clazz)
|
|
}
|
|
} |