JSONUtils

package com.ding.util;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.MapLikeType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * JSON工具类
 */
public class JSONUtils {

    private static final Logger logger = LoggerFactory.getLogger(JSONUtils.class);

    private static final ObjectMapper objectMapper = new ObjectMapper();

    static {
        // 设置null时候不序列化(只针对对象属性)
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

        // 反序列化时,属性不存在的兼容处理
        objectMapper.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

        // 单引号处理
        objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);

        //序列化时候统一日期格式
        objectMapper.setDateFormat(new SimpleDateFormat(DateUtil.FORMAT_DATE_DEFAULT));
    }

    /**
     * 将Java对象转为JSON字符串
     * 
     * <p>
     * JSONUtils.convertObjectToJSON(object)
     * 
     * @param obj
     * @param <T>
     * @return
     */
    public static <T> String convertObjectToJSON(T obj) {
        String jsonStr;
        try {
            jsonStr = objectMapper.writeValueAsString(obj);
        } catch (Exception e) {
            logger.error(">>>>>> Java对象转为JSON错误:", e);
            throw new RuntimeException(e);
        }

        return jsonStr;
    }

    /**
     * 将JSON字符串转为Java对象
     *
     * <p>
     * JSONUtils.convertJSONToObject("123456789", ResultBean.class)
     * 
     * @param json
     * @param type
     * @param <T>
     * @return
     */
    public static <T> T convertJSONToObject(String json, Class<T> type) {
        T obj;
        try {
            obj = objectMapper.readValue(json, type);
        } catch (Exception e) {
            logger.error(">>>>>> JSON转为Java对象错误:", e);
            throw new RuntimeException(e);
        }

        return obj;
    }

    /**
     * 将JSON转成相应的List
     *
     * @param jsonStr
     * @return
     */
    public static List convertJSONToList(String jsonStr) {

        JavaType javaType = JSONUtil.objectMapper.getTypeFactory().constructCollectionType(ArrayList.class, Object.class);

        try {
            return objectMapper.readValue(jsonStr, javaType);
        } catch (IOException e) {
            logger.error(">>>>>> JSON转为相应的List错误:", e);
        }

        return null;
    }

    /**
     * 将JSON转成相应的Map
     *
     * @param jsonStr
     * @return
     */
    public static Map<String, Object> convertJSONToMap(String jsonStr) {

        MapLikeType mapLikeType = JSONUtil.objectMapper.getTypeFactory().constructMapLikeType(HashMap.class, String.class, Object.class);

        try {
            return objectMapper.readValue(jsonStr, mapLikeType);
        } catch (IOException e) {
            logger.error(">>>>>> JSON转为相应的Map错误:", e);
        }

        return null;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值