package com.ltkj.tduck.utils; import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author smalljop * @description: json工具类 使用jackson * @create: 2018-10-23 10:21 **/ public class JsonUtils { private final static ObjectMapper objectMapper = new ObjectMapper(); static { objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); objectMapper.registerModule(new JavaTimeModule()); } private JsonUtils() { } /** * 获取objectMapper实例 */ public static ObjectMapper getInstance() { return objectMapper; } /** * javaBean、列表数组转换为json字符串 */ public static String objToJson(Object obj) { try { return objectMapper.writeValueAsString(obj); } catch (JsonProcessingException e) { e.printStackTrace(); } return null; } /** * javaBean、列表数组转换为json字符串,忽略空值 */ public static String objToJsonIgnoreNull(Object obj) throws Exception { ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); return mapper.writeValueAsString(obj); } /** * json 转对象 */ public static T jsonToObj(String jsonString, Class clazz) { if (StrUtil.isBlank(jsonString)) { return null; } //允许出现单引号 objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); //接受只有一个元素的数组的反序列化 objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); try { return objectMapper.readValue(jsonString, clazz); } catch (IOException e) { throw new RuntimeException(e.getMessage()); } } /** * json字符串转换为map */ public static Map jsonToMap(String jsonString) { if (StrUtil.isBlank(jsonString)) { return null; } ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); try { return mapper.readValue(jsonString, Map.class); } catch (JsonProcessingException e) { e.printStackTrace(); return null; } } public static JsonNode jsonToJsonNode(String jsonString) { if (StrUtil.isBlank(jsonString)) { return null; } ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); try { return mapper.readValue(jsonString, JsonNode.class); } catch (JsonProcessingException e) { e.printStackTrace(); return null; } } /** * json字符串转换为map */ public static Map jsonToMap(String jsonString, Class clazz) throws Exception { Map> map = (Map>) objectMapper.readValue(jsonString, new TypeReference>() { }); Map result = new HashMap(); for (Map.Entry> entry : map.entrySet()) { result.put(entry.getKey(), mapToObj(entry.getValue(), clazz)); } return result; } /** * 深度转换json成map * * @param json * @return */ public static Map jsonToMapDeeply(String json) throws Exception { return jsonToMapRecursion(json, objectMapper); } /** * 把json解析成list,如果list内部的元素存在jsonString,继续解析 * * @param json * @param mapper 解析工具 * @return * @throws Exception */ private static List jsonToListRecursion(String json, ObjectMapper mapper) throws Exception { if (json == null) { return null; } List list = mapper.readValue(json, List.class); for (Object obj : list) { if (obj != null && obj instanceof String) { String str = (String) obj; if (str.startsWith("[")) { obj = jsonToListRecursion(str, mapper); } else if (obj.toString().startsWith("{")) { obj = jsonToMapRecursion(str, mapper); } } } return list; } /** * 把json解析成map,如果map内部的value存在jsonString,继续解析 * * @param json * @param mapper * @return * @throws Exception */ private static Map jsonToMapRecursion(String json, ObjectMapper mapper) throws Exception { if (json == null) { return null; } Map map = mapper.readValue(json, Map.class); for (Map.Entry entry : map.entrySet()) { Object obj = entry.getValue(); if (obj != null && obj instanceof String) { String str = ((String) obj); if (str.startsWith("[")) { List list = jsonToListRecursion(str, mapper); map.put(entry.getKey(), list); } else if (str.startsWith("{")) { Map mapRecursion = jsonToMapRecursion(str, mapper); map.put(entry.getKey(), mapRecursion); } } } return map; } /** * 与javaBean json数组字符串转换为列表 */ public static List jsonToList(String jsonArrayStr, Class clazz) { JavaType javaType = getCollectionType(ArrayList.class, clazz); List lst = null; try { lst = objectMapper.readValue(jsonArrayStr, javaType); } catch (JsonProcessingException e) { e.printStackTrace(); } return lst; } /** * 获取泛型的Collection Type * * @param collectionClass 泛型的Collection * @param elementClasses 元素类 * @return JavaType Java类型 * @since 1.0 */ public static JavaType getCollectionType(Class collectionClass, Class... elementClasses) { return objectMapper.getTypeFactory().constructParametricType(collectionClass, elementClasses); } /** * map 转JavaBean */ public static T mapToObj(Map map, Class clazz) { return objectMapper.convertValue(map, clazz); } /** * map 转json * * @param map * @return */ public static String mapToJson(Map map) { try { return objectMapper.writeValueAsString(map); } catch (Exception e) { e.printStackTrace(); } return ""; } /** * map 转JavaBean */ public static T objToObj(Object obj, Class clazz) { return objectMapper.convertValue(obj, clazz); } /** * 是否是json格式 */ public static boolean isJson(String json) { try { if(StrUtil.isBlank(json)){ return false; } objectMapper.readTree(json); return true; } catch (IOException e) { return false; } } }