Jackson——リストとMapの集合を回転して一般的にJson文字列あるいは逆変換になります
0、最近出会ったことがあって、Jacksonはどのようにjson文字列をListの汎用型の対象に転化して、初めの时自分でJacksonの逆シーケンス化のいくつかの方法をよく知らないため、そのため、逆シーケンスの时いつも成功しないで、后で同僚の指导といくつかの官网文档を见て、やっと正しい転化の使い方を発见して、そこで、公式サイトの推荐する1つの教程をこのブログに翻訳して、参考にします.
以下は翻訳内容です.
1、概要
このチュートリアルでは、Jackson 2を使用してJSON配列をJava配列または集合に逆シーケンス化する方法を示します.
他の面白いことをもっと深く勉強したい場合は、Jackson 2を使用して操作します.Jacksonの主なチュートリアルに移動します.
2、逆シーケンス化配列
JacksonはJava Arrayに簡単に逆シーケンス化できます.
3、逆シーケンス化集合
Javaコレクションに同じJSON配列を読み込むのは困難です.デフォルトでは、Jacksonは完全な汎用タイプ情報を取得するのではなく、Linked HashMapインスタンスのコレクションを作成します.
Jacksonが正しいタイプの情報を理解するのに役立つ2つの方法があります.そのため、ライブラリで提供されているTypeReferenceを使用することができます.
または、JavaTypeのリロードを受け入れるreadValueメソッドを使用します.
最後に、MyDtoクラスにはno-argsデフォルトのコンストラクション関数が必要です.そうでない場合、Jacksonはインスタンス化できません.
4、結論
JSON配列をJavaコレクションにマッピングすることは、Jacksonがよく使用するより一般的なタスクの1つであり、これらのソリューションは、正しいタイプのセキュリティマッピングを得るために重要です.
これらの例とコードセグメントの実装はすべて、GitHubプロジェクトで見つけることができます.これはMavenベースのプロジェクトなので、直接インポートして実行するのは簡単です.
テキスト https://www.baeldung.com/jackson-collection-array
以下は翻訳内容です.
1、概要
このチュートリアルでは、Jackson 2を使用してJSON配列をJava配列または集合に逆シーケンス化する方法を示します.
他の面白いことをもっと深く勉強したい場合は、Jackson 2を使用して操作します.Jacksonの主なチュートリアルに移動します.
2、逆シーケンス化配列
JacksonはJava Arrayに簡単に逆シーケンス化できます.
@Test
public void givenJsonArray_whenDeserializingAsArray_thenCorrect()
throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
List<MyDto> listOfDtos = Lists.newArrayList(
new MyDto("a", 1, true), new MyDto("bc", 3, false));
String jsonArray = mapper.writeValueAsString(listOfDtos);
// [{"stringValue":"a","intValue":1,"booleanValue":true},
// {"stringValue":"bc","intValue":3,"booleanValue":false}]
MyDto[] asArray = mapper.readValue(jsonArray, MyDto[].class);
assertThat(asArray[0], instanceOf(MyDto.class));
}
3、逆シーケンス化集合
Javaコレクションに同じJSON配列を読み込むのは困難です.デフォルトでは、Jacksonは完全な汎用タイプ情報を取得するのではなく、Linked HashMapインスタンスのコレクションを作成します.
@Test
public void givenJsonArray_whenDeserializingAsListWithNoTypeInfo_thenNotCorrect()
throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
List<MyDto> listOfDtos = Lists.newArrayList(
new MyDto("a", 1, true), new MyDto("bc", 3, false));
String jsonArray = mapper.writeValueAsString(listOfDtos);
List<MyDto> asList = mapper.readValue(jsonArray, List.class);
assertThat((Object) asList.get(0), instanceOf(LinkedHashMap.class));
}
Jacksonが正しいタイプの情報を理解するのに役立つ2つの方法があります.そのため、ライブラリで提供されているTypeReferenceを使用することができます.
@Test
public void givenJsonArray_whenDeserializingAsListWithTypeReferenceHelp_thenCorrect()
throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
List<MyDto> listOfDtos = Lists.newArrayList(
new MyDto("a", 1, true), new MyDto("bc", 3, false));
String jsonArray = mapper.writeValueAsString(listOfDtos);
List<MyDto> asList = mapper.readValue(
jsonArray, new TypeReference<List<MyDto>>() { });
assertThat(asList.get(0), instanceOf(MyDto.class));
}
または、JavaTypeのリロードを受け入れるreadValueメソッドを使用します.
@Test
publi void givenJsonArray_whenDeserializingAsListWithJavaTypeHelp_thenCorrect()
throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
List<MyDto> listOfDtos = Lists.newArrayList(
new MyDto("a", 1, true), new MyDto("bc", 3, false));
String jsonArray = mapper.writeValueAsString(listOfDtos);
CollectionType javaType = mapper.getTypeFactory()
.constructCollectionType(List.class, MyDto.class);
List<MyDto> asList = mapper.readValue(jsonArray, javaType);
assertThat(asList.get(0), instanceOf(MyDto.class));
}
最後に、MyDtoクラスにはno-argsデフォルトのコンストラクション関数が必要です.そうでない場合、Jacksonはインスタンス化できません.
com.fasterxml.jackson.databind.JsonMappingException:
No suitable constructor found for type [simple type, class org.baeldung.jackson.ignore.MyDto]:
can not instantiate from JSON object (need to add/enable type information?)
4、結論
JSON配列をJavaコレクションにマッピングすることは、Jacksonがよく使用するより一般的なタスクの1つであり、これらのソリューションは、正しいタイプのセキュリティマッピングを得るために重要です.
これらの例とコードセグメントの実装はすべて、GitHubプロジェクトで見つけることができます.これはMavenベースのプロジェクトなので、直接インポートして実行するのは簡単です.
テキスト