package com.bonus.common.core.utils;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;

import java.util.List;

/**
 * @author fly
 * @version 1
 * json与jsonArray所有自定义bean嵌套的相关操作
 * 将fastjson2简单的封装和添加注释而成
 * <dependency>
 *    <groupId>com.alibaba.fastjson</groupId>
 *    <artifactId>fastjson2</artifactId>
 *    <version>2.0.30</version>
 * </dependency>
 * 修改时间:2021-09-30
 */
public class FastJsonHelper {

    /**
     * 将任意bean转换成json字符串
     * fastjson2
     * @param bean
     * @param <T>
     * @return
     */
    public static <T> String beanToJsonStr(T bean) {
        return JSON.toJSONString(bean);
    }

    /**
     * 把一个json字符串转换成bean对象
     * fastjson2
     * @param str
     * @param <T>
     * @return
     */
    public static <T> T jsonStrToBean(String str, Class<T> clazz) {
        return JSON.parseObject(str, clazz);
    }

    /**
     * 把一个jsonObj转换成bean对象
     * fastjson2
     * @param jsonObj
     * @param <T>
     * @return
     */
    public static <T> T jsonObjToBean(JSONObject jsonObj, Class<T> clazz) {
        return jsonObj.toJavaObject(clazz);
    }

    /**
     * 把一个bean对象转换成jsonObj
     * fastjson2
     * @param bean
     * @param <T>
     * @return
     */
    public static <T> JSONObject beanToJsonObj(T bean) {
        return (JSONObject) JSON.toJSON(bean);
    }

    /**
     * 把一个jsonStr转换成jsonObj
     * fastjson2
     * @param str
     * @return
     */
    public static JSONObject jsonStrToJsonObj(String str) {
        return JSON.parseObject(str);
    }

    /**
     * 把一个jsonObj转换成jsonStr
     * fastjson2
     * @param jsonObj
     * @return
     */
    public static String jsonObjToJsonStr(JSONObject jsonObj) {
        return jsonObj.toJSONString();
    }

    /**
     * 把一个beanList对象转换成jsonArrStr
     * fastjson2
     * @param beanList
     * @param <T>
     * @return
     */
    public static <T> String beanListToJsonArrStr(List<T> beanList) {
        JSONArray jsonArray = (JSONArray) JSON.toJSON(beanList);
        return jsonArray.toJSONString();
    }

    /**
     * 把一个jsonArrStr转换成beanList对象
     * fastjson2
     * @param jsonArrStr
     * @param <T>
     * @return
     */
    public static <T> List<T> jsonArrStrToBeanList(String jsonArrStr, Class<T> clazz) {
        return JSON.parseArray(jsonArrStr, clazz);
    }

    /**
     * 把一个JsonArr转换成JsonArrStr
     * fastjson2
     * @param jsonArr
     * @return
     */
    public static String jsonArrToJsonArrStr(JSONArray jsonArr) {
        return jsonArr.toJSONString();
    }

    /**
     * 把一个JsonArrStr文本转换成JsonArr
     * fastjson2
     * @param jsonArrStr
     * @return
     */
    public static JSONArray jsonArrStrToJsonArr(String jsonArrStr) {
        return JSON.parseArray(jsonArrStr);
    }

    /**
     * 把一个JsonArr转换成beanList
     * fastjson2
     * @param jsonArr
     * @return
     */
    public static <T> List<T> jsonArrToBeanList(JSONArray jsonArr, Class<T> clazz) {
        return jsonArr.toJavaList(clazz);
    }

    /**
     * 把一个beanList文本转换成JsonArr
     * fastjson2
     * @param beanList
     * @return
     */
    public static <T> JSONArray beanListToJsonArr(List<T> beanList) {
        return (JSONArray) JSON.toJSON(beanList);
    }
}
