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 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);
    }


}