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タイプを直接私たちが望むモードに変換するのに便利です.

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;
	}
}