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

commons.box.util.JSONs Maven / Gradle / Ivy

The newest version!
package commons.box.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.Feature;
import com.alibaba.fastjson.parser.ParserConfig;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import commons.box.app.AppError;
import commons.box.app.AppLog;

import java.util.List;
import java.util.function.BiConsumer;

/**
 * JSON解析类
 * 

* 要使用本工具类 必须在最终构建中显式包含 fastjson *

* * compile("com.alibaba:fastjson:${version_fastjson}") * *

* TODO 增加 额外的 consumer 用于解析错误的处理过程,目前没有任何错误抛出 *

*

* 需要额外依赖 compile("com.alibaba:fastjson:${version_fastjson}") *

创建作者:xingxiuyi

*

版权所属:xingxiuyi

*/ public final class JSONs { private static final AppLog LOG = AppLog.get(JSONs.class); public static SerializeConfig SERIAL_FIELD_CONFIG = new SerializeConfig(true); public static ParserConfig PARSER_FIELD_CONFIG = new ParserConfig(true); public static final SerializerFeature[] TO_JSON_HAS_CLS = new SerializerFeature[]{ SerializerFeature.WriteClassName, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteEnumUsingToString, SerializerFeature.WriteNullBooleanAsFalse, SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullNumberAsZero, SerializerFeature.QuoteFieldNames, SerializerFeature.SortField, }; public static final SerializerFeature[] TO_JSON = new SerializerFeature[]{ //SerializerFeature.WriteClassName, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteEnumUsingToString, SerializerFeature.WriteNullBooleanAsFalse, SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullNumberAsZero, SerializerFeature.IgnoreErrorGetter, SerializerFeature.QuoteFieldNames, //SerializerFeature.SortField, }; public static final SerializerFeature[] TO_JSON_WEB = new SerializerFeature[]{ //SerializerFeature.WriteClassName, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteEnumUsingToString, SerializerFeature.WriteNullBooleanAsFalse, SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullNumberAsZero, SerializerFeature.IgnoreErrorGetter, SerializerFeature.BrowserCompatible, SerializerFeature.QuoteFieldNames, //SerializerFeature.SortField, }; public static final SerializerFeature[] TO_JSON_DEBUG = new SerializerFeature[]{ //SerializerFeature.WriteClassName, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteEnumUsingToString, SerializerFeature.WriteNullBooleanAsFalse, SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullNumberAsZero, SerializerFeature.IgnoreErrorGetter, SerializerFeature.QuoteFieldNames, //SerializerFeature.SortField, }; public static final SerializerFeature[] TO_JSON_PRETTY = new SerializerFeature[]{ //SerializerFeature.WriteClassName, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteEnumUsingToString, SerializerFeature.WriteNullBooleanAsFalse, SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullNumberAsZero, SerializerFeature.IgnoreErrorGetter, SerializerFeature.QuoteFieldNames, //SerializerFeature.SortField, SerializerFeature.PrettyFormat, }; public static final SerializerFeature[] TO_JSON_PRETTY_WEB = new SerializerFeature[]{ //SerializerFeature.WriteClassName, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteEnumUsingToString, SerializerFeature.WriteNullBooleanAsFalse, SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullNumberAsZero, SerializerFeature.IgnoreErrorGetter, SerializerFeature.QuoteFieldNames, SerializerFeature.BrowserCompatible, //SerializerFeature.SortField, SerializerFeature.PrettyFormat, }; public static final SerializerFeature[] TO_JSON_SIMPLE = new SerializerFeature[]{ SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteEnumUsingToString, SerializerFeature.NotWriteDefaultValue, SerializerFeature.BrowserCompatible, SerializerFeature.QuoteFieldNames, SerializerFeature.SortField, }; public static final SerializerFeature[] TO_JSON_SIMPLE_DEBUG = new SerializerFeature[]{ SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteEnumUsingToString, SerializerFeature.NotWriteDefaultValue, SerializerFeature.QuoteFieldNames, SerializerFeature.SortField, }; public static final SerializerFeature[] TO_JSON_SIMPLE_WEB = new SerializerFeature[]{ SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteEnumUsingToString, SerializerFeature.NotWriteDefaultValue, SerializerFeature.BrowserCompatible, SerializerFeature.QuoteFieldNames, SerializerFeature.SortField, }; public static final SerializerFeature[] TO_JSON_SIMPLE_PRETTY = new SerializerFeature[]{ SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteEnumUsingToString, SerializerFeature.NotWriteDefaultValue, SerializerFeature.QuoteFieldNames, SerializerFeature.PrettyFormat, SerializerFeature.SortField, }; public static final SerializerFeature[] TO_JSON_SIMPLE_PRETTY_WEB = new SerializerFeature[]{ SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteEnumUsingToString, SerializerFeature.NotWriteDefaultValue, SerializerFeature.QuoteFieldNames, SerializerFeature.PrettyFormat, SerializerFeature.BrowserCompatible, SerializerFeature.SortField, }; public static final Feature[] FROM_JSON = new Feature[]{ Feature.AllowArbitraryCommas, Feature.AllowComment, Feature.AllowSingleQuotes, Feature.AllowUnQuotedFieldNames, Feature.AutoCloseSource, Feature.IgnoreNotMatch, Feature.SortFeidFastMatch, }; public static final Feature[] FROM_JSON_NO_TRANSIENT = new Feature[]{ Feature.AllowArbitraryCommas, Feature.AllowComment, Feature.AllowSingleQuotes, Feature.AllowUnQuotedFieldNames, Feature.AutoCloseSource, Feature.IgnoreNotMatch, Feature.SortFeidFastMatch }; public static final BiConsumer NULL_BCO = (o, e) -> LOG.warn("转换 JSON 错误 {}", (e != null) ? e.getMessage() : null); public static final BiConsumer NULL_BCS = (o, e) -> LOG.warn("转换 JSON 错误 {}", (e != null) ? e.getMessage() : null); static { // 使用标准格式,之前版本的JSON解析需要做处理:通过 @JSONField(format="yyyyMMdd HH:mm:ss.SSS") 指定格式 // https://github.com/alibaba/fastjson/wiki/JSONField JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS"; } private JSONs() { } /** * 格式化 * * @param object * @param serializerFeatures * @return */ public static String to(Object object, SerializerFeature... serializerFeatures) { return to(object, NULL_BCO, serializerFeatures); } public static String to(Object object, BiConsumer onFail, SerializerFeature... serializerFeatures) { if (serializerFeatures == null || serializerFeatures.length < 1) serializerFeatures = TO_JSON; try { return JSON.toJSONString(object, serializerFeatures); } catch (Throwable e) { if (onFail != null) onFail.accept(object, e); } return null; } /** * 格式化 * * @param object * @param serializerFeatures * @return */ public static String to(Object object, SerializeConfig config, SerializerFeature... serializerFeatures) { return to(object, NULL_BCO, config, serializerFeatures); } public static String to(Object object, BiConsumer onFail, SerializeConfig config, SerializerFeature... serializerFeatures) { if (serializerFeatures == null || serializerFeatures.length < 1) serializerFeatures = TO_JSON; try { return JSON.toJSONString(object, config, serializerFeatures); } catch (Throwable e) { if (onFail != null) onFail.accept(object, e); } return null; } /** * 格式化(调试模式,生成格式化后的JSON) * * @param object * @param serializerFeatures * @return */ public static String pretty(Object object, SerializerFeature... serializerFeatures) { return pretty(object, NULL_BCO, serializerFeatures); } public static String pretty(Object object, BiConsumer onFail, SerializerFeature... serializerFeatures) { if (serializerFeatures == null || serializerFeatures.length < 1) serializerFeatures = TO_JSON_PRETTY; return to(object, onFail, serializerFeatures); } /** * 格式化(调试模式,生成格式化后的JSON) * * @param object * @param serializerFeatures * @return */ public static String pretty(Object object, SerializeConfig config, SerializerFeature... serializerFeatures) { return pretty(object, NULL_BCO, config, serializerFeatures); } public static String pretty(Object object, BiConsumer onFail, SerializeConfig config, SerializerFeature... serializerFeatures) { if (serializerFeatures == null || serializerFeatures.length < 1) serializerFeatures = TO_JSON_PRETTY; return to(object, onFail, config, serializerFeatures); } /** * 转换Json文本为对应类的对象,使用特性标识 当未指定类型时注意:对于数组内容返回的是List 而对于其他对象返回的是Map * * @param json * @param * @return * @throws AppError */ @SuppressWarnings("unchecked") public static T from(String json, Feature... features) throws AppError { return from(json, NULL_BCS, features); } @SuppressWarnings("unchecked") public static T from(String json, BiConsumer onFail, Feature... features) throws AppError { if (features == null || features.length < 1) features = FROM_JSON; try { return (T) JSON.parse(json, features); } catch (Throwable e) { if (onFail != null) onFail.accept(json, e); } return null; } /** * 转换Json文本为指定类的对象,使用特性标识 * * @param json * @param type * @param * @return */ public static T from(String json, Class type, Feature... features) { return from(json, type, NULL_BCS, features); } public static T from(String json, Class type, BiConsumer onFail, Feature... features) { if (features == null || features.length < 1) features = FROM_JSON; try { return JSON.parseObject(json, type, features); } catch (Throwable e) { if (onFail != null) onFail.accept(json, e); } return null; } /** * 转换Json文本为对应类的对象,使用特性标识 当未指定类型时注意:对于数组内容返回的是List 而对于其他对象返回的是Map * * @param json * @param * @return * @throws AppError */ @SuppressWarnings("unchecked") public static T from(String json, ParserConfig config, Feature... features) throws AppError { return from(json, NULL_BCS, config, features); } @SuppressWarnings("unchecked") public static T from(String json, BiConsumer onFail, ParserConfig config, Feature... features) throws AppError { if (features == null || features.length < 1) features = FROM_JSON; try { int featureValues = JSON.DEFAULT_PARSER_FEATURE; for (Feature feature : features) featureValues = Feature.config(featureValues, feature, true); return (T) JSON.parse(json, config, featureValues); } catch (Throwable e) { if (onFail != null) onFail.accept(json, e); } return null; } /** * 转换Json文本为指定类的对象,使用特性标识 * * @param json * @param type * @param * @return */ public static T from(String json, Class type, ParserConfig config, Feature... features) { return from(json, type, NULL_BCS, config, features); } public static T from(String json, Class type, BiConsumer onFail, ParserConfig config, Feature... features) { if (features == null || features.length < 1) features = FROM_JSON; try { return JSON.parseObject(json, type, config, features); } catch (Throwable e) { if (onFail != null) onFail.accept(json, e); } return null; } /** * 转换Json文本为JSONObject对象,使用特性标识 * * @param json * @return */ public static JSONObject jobj(String json, Feature... features) { return jobj(json, NULL_BCS, features); } public static JSONObject jobj(String json, BiConsumer onFail, Feature... features) { if (features == null || features.length < 1) features = FROM_JSON; try { return JSON.parseObject(json, features); } catch (Throwable e) { if (onFail != null) onFail.accept(json, e); } return null; } /** * 转换Json文本为原始JSONArray对象,不使用任何特性标识 * * @param json * @return */ public static JSONArray jarray(String json) { return jarray(json, NULL_BCS); } public static JSONArray jarray(String json, BiConsumer onFail) { try { return JSON.parseArray(json); } catch (Throwable e) { if (onFail != null) onFail.accept(json, e); } return null; } /** * 转换Json文本为给定类型的对象列表 * * @param json * @param type * @param * @return */ public static List jarray(String json, Class type) { return jarray(json, type, NULL_BCS); } public static List jarray(String json, Class type, BiConsumer onFail) { try { return JSON.parseArray(json, type); } catch (Throwable e) { if (onFail != null) onFail.accept(json, e); } return null; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy