117 lines
3.8 KiB
Java
117 lines
3.8 KiB
Java
package com.yj.earth.common.util;
|
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
public class MapUtil {
|
|
|
|
private static final ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
/**
|
|
* 合并两个 Map、如果存在相同的 Key、则用新 Map 中的值替换原始 Map 中的值
|
|
* 如果原始 Map 中有某个 Key 而新 Map 中没有、则保持原始 Map 中的值不变
|
|
*/
|
|
public static <K, V> void mergeMaps(Map<K, V> originalMap, Map<K, V> newMap) {
|
|
// 检查参数是否为null、避免空指针异常
|
|
if (originalMap == null || newMap == null) {
|
|
throw new IllegalArgumentException("参数Map不能为null");
|
|
}
|
|
|
|
// 遍历新Map中的所有键值对
|
|
for (Map.Entry<K, V> entry : newMap.entrySet()) {
|
|
K key = entry.getKey();
|
|
// 如果原始Map中存在相同的key、则替换值
|
|
if (originalMap.containsKey(key)) {
|
|
originalMap.put(key, entry.getValue());
|
|
}
|
|
// 如果原始Map中不存在该key、则不做任何操作
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 将JSON字符串转换为Map对象
|
|
*
|
|
* @param jsonString JSON格式的字符串
|
|
* @return 转换后的Map对象、如果JSON为空则返回空Map
|
|
* @throws IllegalArgumentException 当JSON字符串无效或解析失败时抛出
|
|
*/
|
|
public static <K, V> Map<K, V> jsonToMap(String jsonString) {
|
|
if (jsonString == null || jsonString.trim().isEmpty()) {
|
|
return new HashMap<>();
|
|
}
|
|
|
|
try {
|
|
// 将JSON字符串转换为Map
|
|
return objectMapper.readValue(jsonString, Map.class);
|
|
} catch (JsonProcessingException e) {
|
|
throw new IllegalArgumentException("JSON字符串解析失败: " + e.getMessage(), e);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 将 Map 对象转换为JSON字符串
|
|
*/
|
|
public static <K, V> String mapToString(Map<K, V> map) {
|
|
if (map == null) {
|
|
return "";
|
|
}
|
|
|
|
try {
|
|
// 将Map转换为JSON字符串
|
|
return objectMapper.writeValueAsString(map);
|
|
} catch (JsonProcessingException e) {
|
|
throw new IllegalArgumentException("Map转换为JSON字符串失败: " + e.getMessage(), e);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 将任意类型对象转换为JSON字符串
|
|
*/
|
|
public static <T> String objectToJson(T object) {
|
|
if (object == null) {
|
|
return "";
|
|
}
|
|
|
|
try {
|
|
// 将对象转换为JSON字符串
|
|
return objectMapper.writeValueAsString(object);
|
|
} catch (JsonProcessingException e) {
|
|
throw new IllegalArgumentException("对象转换为JSON字符串失败: " + e.getMessage(), e);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 从Map中获取指定key的字符串值
|
|
*
|
|
* @param map 数据源Map
|
|
* @param key 要获取的字段名
|
|
* @return 字段的字符串值、如果map为null或key不存在则返回null
|
|
*/
|
|
public static String getString(Map<?, ?> map, String key) {
|
|
if (map == null || key == null) {
|
|
return null;
|
|
}
|
|
|
|
Object value = map.get(key);
|
|
return value != null ? value.toString() : null;
|
|
}
|
|
|
|
/**
|
|
* 直接从JSON字符串中获取指定key的字符串值
|
|
*
|
|
* @param jsonString JSON格式的字符串
|
|
* @param key 要获取的字段名
|
|
* @return 字段的字符串值、如果JSON为空或key不存在则返回null
|
|
*/
|
|
public static String getString(String jsonString, String key) {
|
|
if (jsonString == null || key == null) {
|
|
return null;
|
|
}
|
|
|
|
Map<?, ?> map = jsonToMap(jsonString);
|
|
return getString(map, key);
|
|
}
|
|
}
|