package com.jimind.sportdemo.utils;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;

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

/**
 * Gson解析工具类
 *
 * @author Any
 */

public class GsonUtils {

    /**
     * 转成JSon格式的字符串
     * @param object
     * @return
     */
    public static String createGsonString(Object object) {
        Gson gson = new Gson();
        return gson.toJson(object);
    }

    /**
     * 转成Bean对象
     * @param string
     * @param cls
     * @param <T>
     * @return
     */
    public static <T> T changeGsonToBean(String string, Class<T> cls) {
        Gson gson = new Gson();
        return gson.fromJson(string, cls);
    }

    /**
     * 转成list
     * 解决泛型问题
     * @param json
     * @param cls
     * @param <T>
     * @return
     */
    public static  <T> List<T> jsonToList(String json, Class<T> cls) {
        Gson gson = new Gson();
        List<T> list = new ArrayList<>();
        JsonArray array = new JsonParser().parse(json).getAsJsonArray();
        for(final JsonElement elem : array){
            list.add(gson.fromJson(elem, cls));
        }
        return list;
    }

    /**
     * 转成List集合
     * @param string
     * @param cls
     * @param <T>
     * @return
     */
    public static <T> List<T> changeGsonToList(String string, Class<T> cls) {
        Gson gson = new Gson();
        return  gson.fromJson(string, new TypeToken<List<T>>() {
        }.getType());
    }

    /**
     * 转成含有map的List集合
     * @param string
     * @param <T>
     * @return
     */
    public static <T> List<Map<String, T>> changeGsonToListMaps(
            String string) {
        List<Map<String, T>> list;
        Gson gson = new Gson();
        list = gson.fromJson(string, new TypeToken<List<Map<String, T>>>() {
        }.getType());
        return list;
    }

    /**
     * 转成map
     * @param string
     * @param <T>
     * @return
     */
    public static <T> Map<String, T> changeGsonToMaps(String string) {
        Map<String, T> map;
        Gson gson = new Gson();
        map = gson.fromJson(string, new TypeToken<Map<String, T>>() {
        }.getType());
        return map;
    }
}
