JSON工具类


package com.test.util;



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

import java.lang.reflect.Type;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;

public class JsonUtil {
    public static final String DATE_FORMAT_YYYYMMDDHHMMSS = "yyyy-MM-dd HH:mm:ss";
    private static final String TIMEZONE_BEIJING = "GMT+08:00";
    private static final String TIMESTAMP_FORMAT_YYYY_MM_DD_HH_MM_SS_SSS = "yyyy-MM-dd HH:mm:ss.SSS";
    private static final ThreadLocal<SimpleDateFormat> TIMESTAMP_FORMAT = new ThreadLocal<SimpleDateFormat>() {
        protected SimpleDateFormat initialValue() {
            return JsonUtil.getTimestampFormat();
        }
    };

    public JsonUtil() {
    }

    public static JsonObject stringToJsonObject(String string) {
        return (new JsonParser()).parse(string).getAsJsonObject();
    }

    public static <T> T stringToClassOfT(String string, Class<T> classOfT) {
        return createGson().fromJson(string, classOfT);
    }

    public static <T> T stringToClassOfTDefaultDateFormat(String string, Class<T> classOfT) {
        return createGsonDefaultDateFormat().fromJson(string, classOfT);
    }

    public static <T> T stringToClassOfTSetDateFormat(String string, Class<T> classOfT, String dateFormat) {
        return createGsonSetDateFormat(dateFormat).fromJson(string, classOfT);
    }

    public static <T> T stringToTypeOfT(String string, Type typeOfT) {
        return createGson().fromJson(string, typeOfT);
    }

    public static <T> T stringToTypeOfTDefaultDateFormat(String string, Type typeOfT) {
        return createGsonDefaultDateFormat().fromJson(string, typeOfT);
    }

    public static <T> T stringToTypeOfTSetDateFormat(String string, Type typeOfT, String dateFormat) {
        return createGsonSetDateFormat(dateFormat).fromJson(string, typeOfT);
    }

    public static <T> List<T> stringToList(String string) {
        return (List) stringToTypeOfT(string, (new TypeToken<List<T>>() {
        }).getType());
    }

    public static <K, V> Map<K, V> stringToMap(String string) {
        return (Map) stringToTypeOfT(string, (new TypeToken<Map<K, V>>() {
        }).getType());
    }

    public static <T> T jsonElementToTypeOfT(JsonElement json, Type typeOfT) {
        return createGson().fromJson(json, typeOfT);
    }

    public static <T> List<T> jsonElementToList(JsonElement json) {
        return (List) jsonElementToTypeOfT(json, (new TypeToken<List<T>>() {
        }).getType());
    }

    public static <K, V> Map<K, V> jsonElementToMap(JsonElement json) {
        return (Map) jsonElementToTypeOfT(json, (new TypeToken<Map<K, V>>() {
        }).getType());
    }

    public static JsonElement objectToJsonElement(Object obj) {
        return createGson().toJsonTree(obj);
    }

    public static JsonElement objectToJsonElement(Object obj, Type typeOfT) {
        return createGson().toJsonTree(obj, typeOfT);
    }

    public static String objectToJsonString(Object obj) {
        return createGsonSetDateFormat("yyyy-MM-dd HH:mm:ss").toJson(obj);
    }

    public static String objectToJsonStringSetDateFormat(Object obj, String dateFormat) {
        return objectToJsonString(obj, (new GsonBuilder()).setDateFormat(dateFormat));
    }

    public static String objectToJsonStringDisableHtmlEscaping(Object obj) {
        return objectToJsonString(obj, (new GsonBuilder()).disableHtmlEscaping());
    }

    public static String objectToJsonString(Object obj, GsonBuilder gsonBuilder) {
        return gsonBuilder.create().toJson(obj);
    }

    public static String getAsString(JsonObject jo, String name) {
        JsonElement je = jo.get(name);
        return je != null && !je.isJsonNull() ? je.getAsString() : null;
    }

    public static Timestamp getAsTimestamp(JsonObject jo, String name) throws ParseException {
        String str = getAsString(jo, name);
        return str == null ? null : stringToTimestamp(str);
    }

    private static SimpleDateFormat getTimestampFormat() {
        TimeZone timeZoneBeijing = TimeZone.getTimeZone("GMT+08:00");
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        format.setTimeZone(timeZoneBeijing);
        return format;
    }

    public static Timestamp stringToTimestamp(String str) throws ParseException {
        return new Timestamp(((SimpleDateFormat) TIMESTAMP_FORMAT.get()).parse(str).getTime());
    }

    public static Integer getAsInt(JsonObject jo, String name) {
        JsonElement je = jo.get(name);
        return je != null && !je.isJsonNull() ? je.getAsInt() : null;
    }

    public static Long getAsLong(JsonObject jo, String name) {
        JsonElement je = jo.get(name);
        return je != null && !je.isJsonNull() ? je.getAsLong() : null;
    }

    public static Boolean getAsBoolean(JsonObject jo, String name) {
        JsonElement je = jo.get(name);
        return je != null && !je.isJsonNull() ? je.getAsBoolean() : null;
    }

    public static JsonObject getAsJsonObject(JsonObject jo, String name) {
        JsonElement je = jo.get(name);
        return je != null && !je.isJsonNull() ? je.getAsJsonObject() : null;
    }

    public static String[] getAsStringArray(JsonObject jo, String name) {
        JsonElement je = jo.get(name);
        if (je != null && !je.isJsonNull()) {
            JsonArray ja = je.getAsJsonArray();
            if (ja.size() != 0) {
                String[] strs = new String[ja.size()];

                for (int i = 0; i < ja.size(); ++i) {
                    strs[i] = ja.get(i).getAsString();
                }

                return strs;
            }
        }

        return null;
    }

    private static Gson createGson() {
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.registerTypeAdapter(Date.class, new GsonDateDeserializer());
        return gsonBuilder.create();
    }

    private static Gson createGsonDefaultDateFormat() {
        return (new GsonBuilder()).setDateFormat("yyyy-MM-dd HH:mm:ss").create();
    }

    private static Gson createGsonSetDateFormat(String dateFormat) {
        return (new GsonBuilder()).setDateFormat(dateFormat).create();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蹉跎之人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值