package com.example.zxweb.utils;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * @Description
 * @Author ZhouWenTao
 * @Date 2023/9/5 15:34
 */
public class FastJsonUtils<T> {
    /**
     * 将 fastjson的JSONArray转化为泛型列表
     * @param jsonArray 源数据
     * @param clz 泛型类
     * @param <T> 泛型
     * @return list
     */
    public static <T> List<T> convertJSONArrayToTypeList(JSONArray jsonArray, Class<T> clz){
        if (CollectionUtils.isEmpty(jsonArray)){
            return new ArrayList<T>();
        }
        List<T> result = new ArrayList<T>(jsonArray.size());
        jsonArray.forEach(element->{
            // 基础类型不可以转化为JSONObject，需要特殊处理
            if (element instanceof String
                    || element instanceof Number
                    || element instanceof Boolean
            ){
                result.add((T)element);
            }else {
                T t = JSONObject.toJavaObject((JSONObject)element, clz);
                result.add(t);
            }
        });
        return result;
    }
}
