JsonHelper.java 3.76 KB
package com.yanzuoguang.util.helper;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;

/**
 * JSON序列化的处理
 *
 * @author 颜佐光
 */
public class JsonHelper {

    /**
     * JSON对象开始标记
     */
    public static final String OBJECT_START_FLAG = "{";

    /**
     * 将JSON字符串转化为JSON对象
     *
     * @param from 来源对象,可以为JSON字符串
     * @param type 对象的类型
     * @param <T>  转换后的结果的类型
     * @return 转换后的结果
     * @throws Exception 转换结果发生异常
     */
    public static <T> T to(Object from, Class<T> type) {
        String json = serialize(from);
        return deserialize(json, type);
    }

    /**
     * 将JSON字符串转化为JSON对象
     *
     * @param from 来源对象,可以为JSON字符串
     * @param type 对象的类型
     * @param <T>  转换后的结果的类型
     * @return 转换后的结果
     * @throws Exception 转换结果发生异常
     */
    public static <T> T to(Object from, TypeReference<T> type) {
        String json = serialize(from);
        return deserialize(json, type);
    }

    /**
     * 将JSON字符串转换为数组
     *
     * @param from 来源对象,可以为JSON字符串
     * @param type 转换的类型
     * @param <T>  数组的类型
     * @return 返回数组
     */
    public static <T> T toArray(Object from, TypeReference<T> type) {
        String json = serialize(from);
        return deserializeArray(json, type);
    }

    /**
     * 将JSON字符串转化为JSON对象
     *
     * @param json JSON字符串
     * @param type 对象的类型
     * @param <T>  转换后的结果的类型
     * @return 转换后的结果
     * @throws Exception 转换结果发生异常
     */
    public static <T> T deserialize(String json, Class<T> type) {
        return JSON.parseObject(json, type);
    }

    /**
     * 将JSON字符串转化为JSON对象
     *
     * @param json JSON字符串
     * @param type 对象的类型
     * @param <T>  转换后的结果的类型
     * @return 转换后的结果
     * @throws Exception 转换结果发生异常
     */
    public static <T> T deserialize(String json, TypeReference<T> type) {
        return JSON.parseObject(json, type);
    }

    /**
     * 将JSON字符串转换为数组
     *
     * @param json 需要转换的JSON
     * @param type 转换的类型
     * @param <T>  数组的类型
     * @return 返回数组
     */
    public static <T> T deserializeArray(String json, TypeReference<T> type) {
        if (json == null || json.length() < 1) {
            return null;
        }
        json = json.trim();
        if (json.startsWith(OBJECT_START_FLAG)) {
            json = String.format("[%s]", json);
        }
        return JSON.parseObject(json, type);
    }

    /**
     * 将对象序列化成JSON
     *
     * @param value 需要序列化的对象
     * @return JSON结果
     * @throws Exception 抛出的异常信息
     */
    public static String serialize(Object value) {
        return JSON.toJSONString(value);
    }

    /**
     * 将对象序列化成JSON
     *
     * @param value  需要序列化的对象
     * @param isLine 是否需要换行
     * @return JSON结果
     * @throws Exception 抛出的异常信息
     */
    public static String serialize(Object value, boolean isLine) {
        return JSON.toJSONString(value, isLine);
    }

    /**
     * JSON对比对象值
     *
     * @param from  来源对象
     * @param to    目标对象
     * @return 对比结果
     */
    public static boolean compare(Object from, Object to) {
        return StringHelper.compare(
                JsonHelper.serialize(from),
                JsonHelper.serialize(to),
                false);
    }

}