官方WIKI:https://github.com/FasterXML/jackson-databind/wiki
jackson 1.x和2.x版本的注解是放置在不同的包下的
1.x是在jackson core jar包org.codehaus.jackson.annotate下
2.x是在jackson-databind包com.fasterxml.jackson.annotation下
jackson-core---核心包(必须),streaming parser/generator,即流式的解析器和生成器,提供基于“流模式”解析的API。核心:JsonPaser(json流读取),JsonGenerator(json流输出)。
jackson-annotations---注解包(可选),提供注解功能。
jackson-databind---数据绑定包(可选),提供基于 ObjectMapper, Json Tree Model(即对象映射器,JSON树模型)相关API。
类注解, 作用类上。作用是json序列化和反序列化时将java bean中的一些属性忽略掉。用法@JsonIgnoreProperties({"property1","property2"})。@JsonIgnoreProperties(ignoreUnknown=true) 会忽略缺少、不匹配的字段。
@JsonIgnore
作用于属性或字段上,用来表明,当生成json或解析json的时候忽略有该annotation的方法或字段。效果同上。
@JsonProperty("firstName")
作用于属性或字段上,重命名。
@JsonFormat
作用于属性或者字段上,方便的把Date类型直接转化为我们想要的模式,如@JsonFormat(pattern ="yyyy-MM-dd HH-mm-ss")
http://fasterxml.github.io/jackson-databind/javadoc/2.0.2/com/fasterxml/jackson/databind/SerializationFeature.html
SerializationFeature.INDENT_OUTPUT:是否缩放排列输出,默认false,有些场合为了便于排版阅读则需要对输出做缩放排列。
objectMapper.configure(SerializationFeature.INDENT_OUTPUT,true);
SerializationFeature.WRITE_DATES_AS_TIMESTAMPS:序列化日期时以timestamps输出,默认true。
SerializationFeature.WRITE_ENUMS_USING_TO_STRING:序列化枚举是以toString()来输出,默认false,即默认以name()来输出。
SerializationFeature.WRITE_ENUMS_USING_INDEX:序列化枚举是以ordinal()来输出,默认false。
http://fasterxml.github.io/jackson-databind/javadoc/2.0.2/com/fasterxml/jackson/databind/SerializationFeature.html
常用配置:
nonStrict_objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
效果类似@JsonIgnoreProperties(ignoreUnknown=true),会忽略缺少、不匹配的字段。
jackson 1.x和2.x版本的注解是放置在不同的包下的
1.x是在jackson core jar包org.codehaus.jackson.annotate下
2.x是在jackson-databind包com.fasterxml.jackson.annotation下
jackson-core---核心包(必须),streaming parser/generator,即流式的解析器和生成器,提供基于“流模式”解析的API。核心:JsonPaser(json流读取),JsonGenerator(json流输出)。
jackson-annotations---注解包(可选),提供注解功能。
jackson-databind---数据绑定包(可选),提供基于 ObjectMapper, Json Tree Model(即对象映射器,JSON树模型)相关API。
常用注解
@JsonIgnoreProperties类注解, 作用类上。作用是json序列化和反序列化时将java bean中的一些属性忽略掉。用法@JsonIgnoreProperties({"property1","property2"})。@JsonIgnoreProperties(ignoreUnknown=true) 会忽略缺少、不匹配的字段。
@JsonIgnore
作用于属性或字段上,用来表明,当生成json或解析json的时候忽略有该annotation的方法或字段。效果同上。
@JsonProperty("firstName")
作用于属性或字段上,重命名。
@JsonFormat
作用于属性或者字段上,方便的把Date类型直接转化为我们想要的模式,如@JsonFormat(pattern ="yyyy-MM-dd HH-mm-ss")
配置SerializationFeature
详细参见:http://fasterxml.github.io/jackson-databind/javadoc/2.0.2/com/fasterxml/jackson/databind/SerializationFeature.html
SerializationFeature.INDENT_OUTPUT:是否缩放排列输出,默认false,有些场合为了便于排版阅读则需要对输出做缩放排列。
objectMapper.configure(SerializationFeature.INDENT_OUTPUT,true);
SerializationFeature.WRITE_DATES_AS_TIMESTAMPS:序列化日期时以timestamps输出,默认true。
SerializationFeature.WRITE_ENUMS_USING_TO_STRING:序列化枚举是以toString()来输出,默认false,即默认以name()来输出。
SerializationFeature.WRITE_ENUMS_USING_INDEX:序列化枚举是以ordinal()来输出,默认false。
配置DeserializationFeature
详细参见:http://fasterxml.github.io/jackson-databind/javadoc/2.0.2/com/fasterxml/jackson/databind/SerializationFeature.html
常用配置:
nonStrict_objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
效果类似@JsonIgnoreProperties(ignoreUnknown=true),会忽略缺少、不匹配的字段。
简单的JacksonUtil
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public final class JacksonUtil {
private static class ObjectMapperHolder {
private static final ObjectMapper strict_objectMapper;
private static ObjectMapper nonStrict_objectMapper;
static {
strict_objectMapper = new ObjectMapper();
nonStrict_objectMapper = new ObjectMapper();
nonStrict_objectMapper.configure(
DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
}
private JacksonUtil() {
throw new AssertionError();
}
/**
* json字符串转Object,严格要求json字段与Object字段一一对应
*
* @param jsonStr
* @param cls
* @return
* @throws Exception
*/
public static <T> T jsonStr2ObjectStrict(String jsonStr, Class<T> cls)
throws Exception {
return (T) ObjectMapperHolder.strict_objectMapper.readValue(jsonStr,
cls);
}
/**
* json字符串转Object,非严格要求json字段与Object字段一一对应
*
* @param jsonStr
* @param cls
* @return
* @throws Exception
*/
public static <T> T jsonStr2ObjectNonStrict(String jsonStr, Class<T> cls)
throws Exception {
return (T) ObjectMapperHolder.nonStrict_objectMapper
.readValue(jsonStr, cls);
}
/**
* 将object转json字符串
*
*/
public static <T> String object2JsonStr(T instance) {
try {
return ObjectMapperHolder.strict_objectMapper
.writeValueAsString(instance);
} catch (Exception e) {
}
return null;
}
/**
* 根据field来解析jsonStr
*
*/
public static String getFieldStr(String jsonStr, String field) {
try {
JsonNode node = ObjectMapperHolder.strict_objectMapper
.readTree(jsonStr);
if (null != node) {
return node.get(field).asText();
}
} catch (Exception e) {
}
return null;
}
/**
* 根据field来解析jsonStr,异常时返回null
*
*/
public static String[] getFieldStr(String jsonStr, String... field) {
int len = field.length;
try {
JsonNode node = ObjectMapperHolder.strict_objectMapper
.readTree(jsonStr);
if (null != node) {
String[] strs = new String[len];
for (int i = 0; i < len; i++) {
strs[i] = node.get(field[i]).asText();
}
return strs;
}
} catch (Exception e) {
}
return null;
}
}