All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.hugh.util.gson.JsonObjects Maven / Gradle / Ivy

The newest version!
package com.github.hugh.util.gson;

import com.alibaba.fastjson.JSON;
import com.github.hugh.util.EmptyUtils;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;

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

/**
 * 由于使用{@link JsonObjectUtils}的方法获取值时需要每次将转{@link JsonObject}作为参数传入,所以该类在new 对象时将需要转换的参数传入,然后转换成{@link JsonObject}
 * 而后只需要使用get方法获取对象中的参数即可。
 *
 * @author hugh
 * @since 1.5.2
 */
public class JsonObjects extends JsonObjectUtils {

    private JsonObject jsonObject;

    /**
     * 无参构造
     */
    public JsonObjects() {
        this.jsonObject = new JsonObject();
    }

    /**
     * 带参构造
     * 

支持字符于泛型

* * @param object 参数 * @param 参数类型 */ public JsonObjects(T object) { if (object instanceof String) { this.jsonObject = parse(object); } else { this.jsonObject = parse(toJson(object)); } } /** * jsonObject 为空 * * @return boolean {@code true} jsonObject为空 */ public boolean isNull() { return isJsonNull(jsonObject); } /** * jsonObject 不为空 * * @return boolean {@code true} jsonObject不为空 * @since 1.6.12 */ public boolean isNotNull() { return !isJsonNull(jsonObject); } /** * 获取gson中对应的{@link JsonObject}后放入封装的{@link JsonObjects}中,方便后续使用 * * @param key 键 * @return {@link JsonObjects} * @since 1.7.4 */ public JsonObjects getThis(String key) { return new JsonObjects(getJsonObject(jsonObject, key)); } /** * get{@link JsonArray} * * @param key 键 * @return {@link JsonArray} json中获取key的{@link JsonArray} 值,没有返回{@code null} */ public JsonArray getJsonArray(String key) { return getJsonArray(jsonObject, key); } /** * 方便的方法获取{@link JsonObject}中对应key的{@link JsonObject}值。 * * @param key 键 * @return {@link JsonObject} json中获取key的JsonObject值,没有返回{@code null} */ public JsonObject getJsonObject(String key) { return getJsonObject(jsonObject, key); } /** * 方便的方法获取{@link JsonObject}中对应key的字符串值。 * * @param key 键 * @return String json中获取key的Integer值,没有返回{@code null} */ public String getString(String key) { return getString(jsonObject, key); } /** * 方便的方法获取{@link JsonObject}中对应key的int值。 * * @param key 键 * @return int 获取key的Integer值,没有返回{@code 0} */ public int getInt(String key) { return getInt(jsonObject, key); } /** * 方便的方法获取{@link JsonObject}中对应key的{@link Integer}值。 * * @param key KEY * @return Integer 获取key的{@link Integer}值,没有返回{@code null} * @since 1.5.4 */ public Integer getInteger(String key) { return getInteger(jsonObject, key); } /** * 方便的方法获取{@link JsonObject}中对应key的double值。 * * @param key 键 * @return double json中获取key的Double值,没有返回{@code 0} */ public double getDoubleValue(String key) { return getDoubleValue(jsonObject, key); } /** * 方便的方法获取{@link JsonObject}中对应key的{@link Double}值。 * * @param key Key * @return Double key的{@link Double}值,没有返回{@code null} * @since 1.5.4 */ public Double getDouble(String key) { return getDouble(jsonObject, key); } /** * 方便的方法获取{@link JsonObject}中对应key的long值。 * * @param key 键 * @return double json中获取key的long值,没有返回{@code 0} * @since 1.5.2 */ public long getLongValue(String key) { return getLongValue(jsonObject, key); } /** * 以空值安全的方式从JsonObject中获取一个Long. * * @param key Key * @return Long json中没有获取key的value时返回{@code null} * @since 1.5.4 */ public Long getLong(String key) { return getLong(jsonObject, key); } /** * 校验 {@link #jsonObject}中根据key获取到的value,是否当前传入的值相同 * * @param key 键 * @param value value * @return boolean {@code true} 相同 * @since 1.5.11 */ public boolean isEquals(String key, String value) { if (isNull()) { return false; } String string = getString(key); if (EmptyUtils.isEmpty(string)) { return false; } return string.equals(value); } /** * 将{@link JsonObjects#jsonObject}内的json对象转换成json格式的字符串 * * @return String * @since 1.6.6 */ public String toJson() { return toJson(jsonObject); } /** * 将{@link #jsonObject} 转换为对应的实体 * * @param classOfT 实体类 * @param 泛型 * @return T 实体 * @since 1.6.7 */ public T formJson(Class classOfT) { return fromJson(this.jsonObject, classOfT); } /** * 将{@link #jsonObject} 转换为对应的实体 *

该方法主要作用与解析日期时、json字符串中的值为时间戳(long)类型时

* * @param classOfT 实体类 * @param 泛型 * @return T 实体 * @since 1.6.13 */ public T fromJsonTimeStamp(Class classOfT) { return fromJsonTimeStamp(this.jsonObject.toString(), classOfT); } /** * 重写 * * @return String */ @Override public String toString() { return this.jsonObject.toString(); } /** * 向{@link #jsonObject}中添加key-value * * @param key 键 * @param value 值 * @since 1.7.6 */ public void addProperty(String key, E value) { if (this.jsonObject == null) { this.jsonObject = new JsonObject(); } if (value instanceof String) { this.jsonObject.addProperty(key, (String) value); } } /** * 移除{@link #jsonObject}key对应的属性 * * @param key KEY * @return JsonElement * @since 2.0.0 */ public JsonElement removeProperty(String key) { return this.jsonObject.remove(key); } /** * 获取当前对象中的list数据,并且转换为对应的list实体集合 * * @param key 获取集合的key * @param clazz 需要转换的类 * @param 类型 * @return List * @since 2.0.5 */ public List toListObject(String key, Class clazz) { List resultList = new ArrayList<>(); JsonArray jsonArray = getJsonArray(this.jsonObject, key); assert jsonArray != null; for (JsonElement jsonElement : jsonArray) { E e = JSON.parseObject(jsonElement.toString(), clazz); resultList.add(e); } return resultList; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy