Jackson 2ノート
4297 ワード
公式WIKI:https://github.com/FasterXML/jackson-databind/wiki jackson 1.xと2.xバージョンの注記は、異なるパッケージの下に配置されています.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({"property 1","property 2"}).JsonIgnoreProperties(ignoreUnknown=true)では、欠落した、一致しないフィールドは無視されます.@JsonIgnoreは、jsonを生成したり、jsonを解析したりするときにannotationのメソッドやフィールドが無視されることを示すために属性またはフィールドに作用します.効果は同じです.@JsonProperty(「firstName」)は、属性またはフィールドに作用し、名前を変更します.@JsonFormatは属性またはフィールドに作用し、@JsonFormat(pattern="yyyy-MM-dd HH-mm-ss")のようなDateタイプを直接私たちが望むモードに変換するのに便利です.
詳細については、次を参照してください.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)と似ており、欠落した、一致しないフィールドは無視されます.
よく使う注記
@JsonIgnorePropertiesクラス注記、役割クラス.jsonシーケンス化と逆シーケンス化でjava beanのいくつかの属性を無視します.使い方@JsonIgnoreProperties({"property 1","property 2"}).JsonIgnoreProperties(ignoreUnknown=true)では、欠落した、一致しないフィールドは無視されます.@JsonIgnoreは、jsonを生成したり、jsonを解析したりするときにannotationのメソッドやフィールドが無視されることを示すために属性またはフィールドに作用します.効果は同じです.@JsonProperty(「firstName」)は、属性またはフィールドに作用し、名前を変更します.@JsonFormatは属性またはフィールドに作用し、@JsonFormat(pattern="yyyy-MM-dd HH-mm-ss")のようなDateタイプを直接私たちが望むモードに変換するのに便利です.
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)と似ており、欠落した、一致しないフィールドは無視されます.
簡単なジャックソンUtil
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;
}
}