Json工具類----Jackson

weixin_45822048發表於2020-11-20

程式碼部分

public class JacksonUtils {
private final static ObjectMapper obejectmapper=new ObjectMapper();
private JacksonUtils(){

}
private static ObjectMapper getInstance(){
    return obejectmapper;
}
/**
 * javaBean、列表陣列轉換為json字串
 */
public static String obj2json(Object obj) throws Exception {
    return obejectmapper.writeValueAsString(obj);
}
/**
 * javaBean、列表陣列轉換為json字串,忽略空值
 */
public static String obj2jsonIgnoreNull(Object obj) throws Exception {
    ObjectMapper mapper = new ObjectMapper();
    mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    return mapper.writeValueAsString(obj);
}
/**
 * json 轉JavaBean
 */
public static <T> T json2pojo(String jsonString, Class<T> clazz) throws Exception {
    obejectmapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
    return obejectmapper.readValue(jsonString, clazz);
}
/**
 * json字串轉換為map
 */
public static <T> Map<String, Object> json2map(String jsonString) throws Exception {
    ObjectMapper mapper = new ObjectMapper();
    mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    return mapper.readValue(jsonString, Map.class);
}
/**
 * json字串轉換為map
 */
public static <T> Map<String, T> json2map(String jsonString, Class<T> clazz) throws Exception {

    Map<String, Map<String, Object>> map = (Map<String, Map<String, Object>>) obejectmapper.readValue(jsonString, new TypeReference<Map<String, T>>() {
    });
    Map<String, T> result = new HashMap<String, T>();
    for (Map.Entry<String, Map<String, Object>> entry : map.entrySet()) {
        result.put(entry.getKey(), map2pojo(entry.getValue(), clazz));
    }
    return result;
}
/**
 * 深度轉換json成map
 *
 * @param json
 * @return
 */
public static Map<String, Object> json2mapDeeply(String json) throws Exception {
    return json2MapRecursion(json, obejectmapper);
}
/**
 * 把json解析成list,如果list內部的元素存在jsonString,繼續解析
 *
 * @param json
 * @param mapper 解析工具
 * @return
 * @throws Exception
 */
private static List<Object> json2ListRecursion(String json, ObjectMapper mapper) throws Exception {
    if (json == null) {
        return null;
    }

    List<Object> list = mapper.readValue(json, List.class);

    for (Object obj : list) {
        if (obj != null && obj instanceof String) {
            String str = (String) obj;
            if (str.startsWith("[")) {
                obj = json2ListRecursion(str, mapper);
            } else if (obj.toString().startsWith("{")) {
                obj = json2MapRecursion(str, mapper);
            }
        }
    }

    return list;
}
/**
 * 把json解析成map,如果map內部的value存在jsonString,繼續解析
 *
 * @param json
 * @param mapper
 * @return
 * @throws Exception
 */
private static Map<String, Object> json2MapRecursion(String json, ObjectMapper mapper) throws Exception {
    if (json == null) {
        return null;
    }

    Map<String, Object> map = mapper.readValue(json, Map.class);

    for (Map.Entry<String, Object> entry : map.entrySet()) {
        Object obj = entry.getValue();
        if (obj != null && obj instanceof String) {
            String str = ((String) obj);

            if (str.startsWith("[")) {
                List<?> list = json2ListRecursion(str, mapper);
                map.put(entry.getKey(), list);
            } else if (str.startsWith("{")) {
                Map<String, Object> mapRecursion = json2MapRecursion(str, mapper);
                map.put(entry.getKey(), mapRecursion);
            }
        }
    }

    return map;
}

/**
 * 與javaBean json陣列字串轉換為列表
 */
public static <T> List<T> json2list(String jsonArrayStr, Class<T> clazz) throws Exception {

    JavaType javaType = getCollectionType(ArrayList.class, clazz);
    List<T> lst = (List<T>) obejectmapper.readValue(jsonArrayStr, javaType);
    return lst;
}

/**
 * 獲取泛型的Collection Type
 *
 * @param collectionClass 泛型的Collection
 * @param elementClasses  元素類
 * @return JavaType Java型別
 * @since 1.0
 */
public static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {
    return obejectmapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
}


/**
 * map  轉JavaBean
 */
public static <T> T map2pojo(Map map, Class<T> clazz) {
    return obejectmapper.convertValue(map, clazz);
}
/**
 * map 轉json
 *
 * @param map
 * @return
 */
public static String mapToJson(Map map) {
    try {
        return obejectmapper.writeValueAsString(map);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "";
}

/**
 * map  轉JavaBean
 */
public static <T> T obj2pojo(Object obj, Class<T> clazz) {
    return obejectmapper.convertValue(obj, clazz);
}

}

相關文章