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

com.magictools.json.JSONGetter Maven / Gradle / Ivy

The newest version!
package com.magictools.json;

import com.magictools.core.convert.Convert;
import com.magictools.core.convert.ConvertException;
import com.magictools.core.date.DateUtil;
import com.magictools.core.date.LocalDateTimeUtil;
import com.magictools.core.getter.OptNullBasicTypeFromObjectGetter;
import com.magictools.core.util.StrUtil;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Optional;

/**
 * 用于JSON的Getter类,提供各种类型的Getter方法
 *
 * @param  Key类型
 * @author Looly
 */
public interface JSONGetter extends OptNullBasicTypeFromObjectGetter {

	/**
	 * 获取JSON配置
	 *
	 * @return {@link JSONConfig}
	 * @since 5.3.0
	 */
	JSONConfig getConfig();

	/**
	 * key对应值是否为{@code null}或无此key
	 *
	 * @param key 键
	 * @return true 无此key或值为{@code null}或{@link JSONNull#NULL}返回{@code false},其它返回{@code true}
	 */
	default boolean isNull(K key) {
		return JSONUtil.isNull(this.getObj(key));
	}

	/**
	 * 获取字符串类型值,并转义不可见字符,如'\n'换行符会被转义为字符串"\n"
	 *
	 * @param key 键
	 * @return 字符串类型值
	 * @since 4.2.2
	 */
	default String getStrEscaped(K key) {
		return getStrEscaped(key, null);
	}

	/**
	 * 获取字符串类型值,并转义不可见字符,如'\n'换行符会被转义为字符串"\n"
	 *
	 * @param key          键
	 * @param defaultValue 默认值
	 * @return 字符串类型值
	 * @since 4.2.2
	 */
	default String getStrEscaped(K key, String defaultValue) {
		return JSONUtil.escape(getStr(key, defaultValue));
	}

	/**
	 * 获得JSONArray对象
* 如果值为其它类型对象,尝试转换为{@link JSONArray}返回,否则抛出异常 * * @param key KEY * @return JSONArray对象,如果值为{@code null},返回{@code null},非JSONArray类型,尝试转换,转换失败抛出异常 */ default JSONArray getJSONArray(K key) { final Object object = this.getObj(key); if (JSONUtil.isNull(object)) { return null; } if (object instanceof JSON) { return (JSONArray) object; } return new JSONArray(object, getConfig()); } /** * 获得JSONObject对象
* 如果值为其它类型对象,尝试转换为{@link JSONObject}返回,否则抛出异常 * * @param key KEY * @return JSONObject对象,如果值为{@code null},返回{@code null},非JSONObject类型,尝试转换,转换失败抛出异常 */ default JSONObject getJSONObject(K key) { final Object object = this.getObj(key); if (JSONUtil.isNull(object)) { return null; } if (object instanceof JSON) { return (JSONObject) object; } return new JSONObject(object, getConfig()); } /** * 从JSON中直接获取Bean对象
* 先获取JSONObject对象,然后转为Bean对象 * * @param Bean类型 * @param key KEY * @param beanType Bean类型 * @return Bean对象,如果值为null或者非JSONObject类型,返回null * @since 3.1.1 */ default T getBean(K key, Class beanType) { final JSONObject obj = getJSONObject(key); return (null == obj) ? null : obj.toBean(beanType); } /** * 从JSON中直接获取Bean的List列表
* 先获取JSONArray对象,然后转为Bean的List * * @param Bean类型 * @param key KEY * @param beanType Bean类型 * @return Bean的List,如果值为null或者非JSONObject类型,返回null * @since 5.7.20 */ default List getBeanList(K key, Class beanType) { final JSONArray jsonArray = getJSONArray(key); return (null == jsonArray) ? null : jsonArray.toList(beanType); } @Override default Date getDate(K key, Date defaultValue) { // 默认转换 final Object obj = getObj(key); if (JSONUtil.isNull(obj)) { return defaultValue; } if (obj instanceof Date) { return (Date) obj; } final Optional formatOps = Optional.ofNullable(getConfig()).map(JSONConfig::getDateFormat); if (formatOps.isPresent()) { final String format = formatOps.get(); if (StrUtil.isNotBlank(format)) { // 用户指定了日期格式,获取日期属性时使用对应格式 final String str = Convert.toStr(obj); if (null == str) { return defaultValue; } return DateUtil.parse(str, format); } } return Convert.toDate(obj, defaultValue); } /** * 获取{@link LocalDateTime}类型值 * * @param key 键 * @param defaultValue 默认值 * @return {@link LocalDateTime} * @since 5.7.7 */ default LocalDateTime getLocalDateTime(K key, LocalDateTime defaultValue) { // 默认转换 final Object obj = getObj(key); if (JSONUtil.isNull(obj)) { return defaultValue; } if (obj instanceof LocalDateTime) { return (LocalDateTime) obj; } final Optional formatOps = Optional.ofNullable(getConfig()).map(JSONConfig::getDateFormat); if (formatOps.isPresent()) { final String format = formatOps.get(); if (StrUtil.isNotBlank(format)) { // 用户指定了日期格式,获取日期属性时使用对应格式 final String str = Convert.toStr(obj); if (null == str) { return defaultValue; } return LocalDateTimeUtil.parse(str, format); } } return Convert.toLocalDateTime(obj, defaultValue); } /** * 获取byte[]数据 * * @param key 键 * @return 值 * @since 5.8.2 */ default byte[] getBytes(K key) { return get(key, byte[].class); } /** * 获取指定类型的对象
* 转换失败或抛出异常 * * @param 获取的对象类型 * @param key 键 * @param type 获取对象类型 * @return 对象 * @throws ConvertException 转换异常 * @since 3.0.8 */ default T get(K key, Class type) throws ConvertException { return get(key, type, false); } /** * 获取指定类型的对象 * * @param 获取的对象类型 * @param key 键 * @param type 获取对象类型 * @param ignoreError 是否跳过转换失败的对象或值 * @return 对象 * @throws ConvertException 转换异常 * @since 3.0.8 */ default T get(K key, Class type, boolean ignoreError) throws ConvertException { final Object value = this.getObj(key); if (JSONUtil.isNull(value)) { return null; } return JSONConverter.jsonConvert(type, value, ignoreError); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy