当前位置: 首页 > >

json处理(jackson)

发布时间:

    ObjectMapper

配置方法(链式调用)
方法描述
registerModule(Module module)注册模块
registerModules(Module… modules)注册多个模块
findAndRegisterModules()查找并注册模块
setSerializerFactory(SerializerFactory f)设置序列化工厂
setSerializerProvider(DefaultSerializerProvider p)设置序列化提供者
setMixIns(Map, Class> mixins)设置混合类型
addMixIn(Class target, Class mixinSource)添加混合类型
setMixInResolver(MixInResolver resolver)设置混合解析器
setVisibility(VisibilityChecker vc)设置可见性
setSubtypeResolver(SubtypeResolver str)设置子类型解析器
setAnnotationIntrospector(AnnotationIntrospector ai)设置公共注释内省者
setAnnotationIntrospectors(AnnotationIntrospector s,
String propertyName)
启用字段默认类型
disableDefaultTyping()禁用默认类型
setDefaultTyping(TypeResolverBuilder typer)设置默认类型
setTypeFactory(TypeFactory f)设置类型工厂
setNodeFactory(JsonNodeFactory f)设置节点工厂
addHandler(DeserializationProblemHandler h)添加处理器
clearProblemHandlers()清除处理器
setConfig(DeserializationConfig config)设置配置
setFilterProvider(FilterProvider filterProvider)设置过滤提供者
setBase64Variant(Base64Variant v)设置Base64变体
setDateFormat(DateFormat dateFormat)设置日期格式
setHandlerInstantiator(HandlerInstantiator hi)设置处理程序实例化器
setInjectableValues(InjectableValues injectableValues)设置可注射值
setLocale(Locale l)设置语言环境
setTimeZone(TimeZone tz)设置时区
configure(MapperFeature f, boolean state)设置配置
enable(MapperFeature… f)启用配置
disable(MapperFeature… f)禁用配置

操作方法
方法描述
copy()复制有个对象
version()获取版本信息
getSerializationConfig()获取序列化配置
getDeserializationConfig()获取反序列化配置
getDeserializationContext()获取反序列化上下文
mixInCount()获取混合类型数量
getSerializerProviderInstance()获取序列化提供者实例
getVisibilityChecker()获取可见性检查器
findMixInClassFor(Class cls)查找混合类型类
getSubtypeResolver()获取子类型解析器
registerSubtypes(Class… classes)注册子类型
configOverride(Class type)配置覆盖
getTypeFactory()获取类型工厂
constructType(Type t)获取构造类型
getNodeFactory()获取节点工厂
getFactory()获取工厂
getDateFormat()获取日期类型
getInjectableValues()获取可注射值
isEnabled(MapperFeature f)判断配置是否启用
readValue(String content, Class valueType)读取json;

常量


SerializationFeature

通过ObjectMapper对象configure/enable/disable方法设置


常量描述
WRAP_ROOT_VALUE是否以类名为根节点,默认false
INDENT_OUTPUT是否缩放排列输出,默认false
FAIL_ON_EMPTY_BEANS空失败
FAIL_ON_SELF_REFERENCES自引用失败
WRAP_EXCEPTIONS包装异常
FAIL_ON_UNWRAPPED_TYPE_IDENTIFIERS未包装的类型标识符失败
CLOSE_CLOSEABLE关闭
FLUSH_AFTER_WRITE_VALUE写入值后刷新
WRITE_DATES_AS_TIMESTAMPS序列化Date日期时以时间戳输出,默认true;为false时以 2020-09-16T01:07:23.275+0000 格式输出
WRITE_DATE_KEYS_AS_TIMESTAMPS将日期键写入时间戳
WRITE_DATES_WITH_ZONE_ID将区域id写入日期
WRITE_DURATIONS_AS_TIMESTAMPS将持续时间写成时间戳
WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS序列化char[]时以json数组输出,默认false
WRITE_ENUMS_USING_TO_STRING序列化枚举是否以toString()来输出,

DeserializationFeature

通过ObjectMapper对象configure/enable/disable方法设置


常量描述
USE_BIG_DECIMAL_FOR_FLOATS浮点类型使用BigDecimal,默认false
USE_BIG_INTEGER_FOR_INTSint类型使用BigInteger,默认false
USE_LONG_FOR_INTSint类型使用long,默认false
USE_JAVA_ARRAY_FOR_JSON_ARRAYjson序列使用java序列,默认false
FAIL_ON_UNKNOWN_PROPERTIES为false忽略未知属性失败,默认为true
FAIL_ON_NULL_FOR_PRIMITIVES主键为空失败
FAIL_ON_NUMBERS_FOR_ENUMS数字枚举失败
FAIL_ON_INVALID_SUBTYPE无效的子类型失败
FAIL_ON_READING_DUP_TREE_KEY读取双树树密钥失败
FAIL_ON_IGNORED_PROPERTIES被忽略的属性失败
FAIL_ON_UNRESOLVED_OBJECT_IDS未能解决的对象ID失败
FAIL_ON_MISSING_CREATOR_PROPERTIES缺少创作者属性失败
FAIL_ON_NULL_CREATOR_PROPERTIES空创建者属性失败
FAIL_ON_MISSING_EXTERNAL_TYPE_ID_PROPERTY缺少外部类型ID属性失败
FAIL_ON_TRAILING_TOKENS交易令牌失败
WRAP_EXCEPTIONS报错异常
ACCEPT_SINGLE_VALUE_AS_ARRAY单值可转换为集合数组,默认false
UNWRAP_SINGLE_VALUE_ARRAYS取消单值数组,默认false
UNWRAP_ROOT_VALUE解析根节点为类名的json,默认false
ACCEPT_EMPTY_STRING_AS_NULL_OBJECT接受空字符串作为空对象,默认false
ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT接受空数组作为空对象,默认false
ACCEPT_FLOAT_AS_INT接受float类型为int,默认true
READ_ENUMS_USING_TO_STRING使用字符串读取枚举,默认false
READ_UNKNOWN_ENUM_VALUES_AS_NULL将未知的枚举值读取为NULL,默认false
READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE使用默认值读取未知的枚举值,默认false
READ_DATE_TIMESTAMPS_AS_NANOSECONDS读取日期时间戳记,默认true
ADJUST_DATES_TO_CONTEXT_TIME_ZONE调整日期到时区,默认true
EAGER_DESERIALIZER_FETCHEAGER反序列化器

JsonInclude.Include

通过@JsonInclude的value属性设置


常量描述
ALWAYS默认,序列化所有属性
NON_NULL属性为NULL 不序列化
NON_ABSENT同 NON_NULL
NON_EMPTY属性为 空字符串或 NULL 都不序列化
NON_DEFAULT属性为默认值不序列化
CUSTOM定制
USE_DEFAULTS序列化默认值

JsonParser.Feature

通过ObjectMapper对象enable/disable方法


常量描述
AUTO_CLOSE_SOURCE解析json自动关闭输入源,默认true
ALLOW_COMMENTS解析json许解析使用Java/C++ 样式的注释,默认false
ALLOW_YAML_COMMENTS解析json许解析使用YAML 样式的注释,默认false
ALLOW_UNQUOTED_FIELD_NAMES解析json允许使用非双引号属性名字,默认false
ALLOW_SINGLE_QUOTES解析json允许单引号来包住属性名称和字符串值,默认false
STRICT_DUPLICATE_DETECTION解析json严格重复校验,有重复字段抛异常,默认false
IGNORE_UNDEFINED忽略未定义
INCLUDE_SOURCE_IN_LOCATION在位置包含来源

JsonParser.NumberType


常量描述
INTint类型
LONGlong类型
BIG_INTEGERBigInteger类型
FLOATfloat类型
DOUBLEDouble类型
BIG_DECIMALBigDecimal类型

JsonGenerator.Feature

通过ObjectMapper对象configure/enable/disable方法设置


常量描述
AUTO_CLOSE_TARGET自动关闭目标
AUTO_CLOSE_JSON_CONTENT自动关闭JSON内容
FLUSH_PASSED_TO_STREAM刷新流
WRITE_BIGDECIMAL_AS_PLAINbigdecimal类型写入
STRICT_DUPLICATE_DETECTION严格重复校验
IGNORE_UNKNOWN忽略未定义

MapperFeature
通过ObjectMapper对象configure/enable/disable方法设置


常量描述
USE_ANNOTATIONS使用注解,默认true
USE_GETTERS_AS_SETTERS使用get与set方法,默认true
PROPAGATE_TRANSIENT_MARKER忽略 transient 修饰的属性,默认false
AUTO_DETECT_CREATORS自动检测创建者
AUTO_DETECT_FIELDS自动检测字段
AUTO_DETECT_GETTERS自动检测getter方法
AUTO_DETECT_IS_GETTERS自动检测是否是getter方法
AUTO_DETECT_SETTERS自动检测setter方法
REQUIRE_SETTERS_FOR_GETTERS需要使用get与set方法,默认false
ALLOW_FINAL_FIELDS_AS_MUTATORS允许final修饰字段可修改,默认true
INFER_PROPERTY_MUTATORS推断字段可修改,默认true
INFER_CREATOR_FROM_CONSTRUCTOR_PROPERTIES从构造函数属性推断创建者,默认true
CAN_OVERRIDE_ACCESS_MODIFIERS可以覆盖访问修饰符,默认true
OVERRIDE_PUBLIC_ACCESS_MODIFIERS覆盖公共访问修饰符,默认true
USE_STATIC_TYPING使用静态类型,默认false
DEFAULT_VIEW_INCLUSION默*油,默认true
SORT_PROPERTIES_ALPHABETICALLY按字母排序,默认false
ACCEPT_CASE_INSENSITIVE_PROPERTIES接受字段命名不敏感,默认false
ACCEPT_CASE_INSENSITIVE_ENUMS接受枚举命名不敏感,默认false
USE_WRAPPER_NAME_AS_PROPERTY_NAME使用包装器名称作为属性名称,默认false
USE_STD_BEAN_NAMING使用标准Bean命名法,默认false
ALLOW_EXPLICIT_PROPERTY_RENAMING允许显式属性重命名,默认false
ALLOW_COERCION_OF_SCALARS允许强制标量,默认true
IGNORE_DUPLICATE_MODULE_REGISTRATIONS忽略重复的模块注册,默认true
IGNORE_MERGE_FOR_UNMERGEABLE忽略合并为不可合并,默认true

JsonFactory.Feature


常量描述
INTERN_FIELD_NAMES内部字段名,默认true
CANONICALIZE_FIELD_NAMES规范字段名,默认true
FAIL_ON_SYMBOL_HASH_OVERFLOW哈希溢出失败,默认true
USE_THREAD_LOCAL_FOR_BUFFER_RECYCLING使用本地线程进行缓冲区回收,默认true

PropertyNamingStrategy

通过ObjectMapper对象setPropertyNamingStrategy方法设置


常量描述
SNAKE_CASE蛇形命名法,例如:abc_def
UPPER_CAMEL_CASE大驼峰命名法,例如:AbcDef
LOWER_CAMEL_CASE小驼峰命名法,例如:abcDef
LOWER_CASE全小写命名法,例如:abcdef
KEBAB_CASELisp风格命名法,例如:abc-def

JsonAutoDetect.Visibility

在@JsonAutoDetect中配置


常量描述
ANY自动发现所有修饰符的属性
NON_PRIVATE自动发现除被private修饰以外的属性;当字段及get/set方法被private修饰时,则该字段不被自动发现
PROTECTED_AND_PUBLIC自动发现protected与public修饰的属性
PUBLIC_ONLY仅自动被public修饰的属性
NONE指禁止发现所有的属性,但是对getter/setter方法无效
DEFAULT默认,同PUBLIC_ONLY

JsonProperty.Access (字段权限常量)

在@JsonProperty的属性access配置


常量描述
AUTO自动
READ_ONLY只读
WRITE_ONLY只写
READ_WRITE可读写

JsonSerialize.Typing


常量描述
DYNAMIC动态
STATIC静态
DEFAULT_TYPING默认

JsonTypeInfo.Id


常量描述
NONE不使用识别码
CLASS使用完全限定类名做识别
MINIMAL_CLASS若基类和子类在同一包类,使用类名(忽略包名)作为识别码
NAME一个合乎逻辑的指定名称
CUSTOM自定义识别码,由@JsonTypeIdResolver对应

JsonTypeInfo.As


常量描述
PROPERTY作为数据的兄弟属性
WRAPPER_OBJECT作为一个包装的对象
WRAPPER_ARRAY作为一个包装的数组
EXTERNAL_PROPERTY作为扩展属性
EXISTING_PROPERTY作为POJO中已经存在的属性

1

常用注解


注解描述(常用属性)
@JsonIgnore忽略字段,字段,get与set方法上

常用接口实现类及抽象类子类


FilterProvider

可通过ObjectMapper的setFilterProvider方法设置


SimpleFilterProvider
方法描述
addFilter(String id, PropertyFilter filter)添加过滤器,id用来匹配实体上

PropertyFilter


SimpleBeanPropertyFilter
方法描述
serializeAll()序列化全部
filterOutAllExcept(String… propertyArray)指定要序列化的字段,参数可为set
serializeAllExcept(String… propertyArray)指定不要序列化的字段,参数可为set
from(BeanPropertyFilter src)从另一个过滤器获取

InjectableValues

可通过ObjectMapper的setInjectableValues方法设置


Std
方法描述
addValue(String key, Object value)与@JacksonInject同用.用于通过key为反序列化json为定义的字段注入默认值

ObjectIdGenerator 对象id生成器


实现类描述
StringIdGenerator字符串id生成器
UUIDGeneratorUUID生成器
IntSequenceGenerator有序数列生成器
PropertyBasedObjectIdGenerator基础字段id生成器

Module


Jdk8Module 支持jdk8日期类型

SimpleModule 可用于自定义模块


方法描述
addSerializer(Class type,

ParameterNamesModule SimpleModule子类,参数名称模块

JsonComponentModule SimpleModule子类json组件称模块

实例


简单使用

List list =new ArrayList();
Person person = new Person();
person.setName("zp");
list.add(person);
String jsonString = mapper.writeValueAsString(list);
System.out.println(jsonString);
List list1 = mapper.readValue(jsonString,
new TypeReference>() {});//json转list
Person person1 = mapper.readValue(jsonString,Person.class);//json转JavaBean

泛型使用示例

//list泛型
CollectionType JavaType = mapper.getTypeFactory().constructCollectionType(List.class, Person.class);
List personList = mapper.readValue(JSONInString, JavaType);
List personList = mapper.readValue(JSONInString, new TypeReference>(){});
//map泛型
MapType JavaType = mapper.getTypeFactory().constructMapType(HashMap.class,String.class,Person.class);
Map personMap = mapper.readValue(JSONInString,JavaType);
Map personMap = mapper.readValue(JSONInString, new TypeReference>() {});

自定义序列化器

public class DateJsonSerializer extends JsonSerializer {
public static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString(format.format(date));
}
}

自定义反序列化

public class DateJsonDeserializer extends JsonDeserializer {
public static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) {
try {
if (jsonParser != null && jsonParser.getText() != null) {
return format.parse(jsonParser.getText());
} else {
return null;
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}

反序列化未定义字段采用map接收

//实体类新增map字段
private Map other = new HashMap<>();
//新增以下get/set方法
@JsonAnyGetter
public Map getOther() {
return other;
}
@JsonAnySetter
public void setOther(Map map) {
this.other =m6ap;
}

其他


jsr310

处理日期类型为 Java.time.LocalDate,引入依赖并注册以下模块

objectMapper.registerModule(new JSR310Module ())

joda

处理日期类型为org.joda.time.DateTime,引入依赖并注册以下模块

mapper.registerModule(new JodaModule())



友情链接: