1. ホーム
  2. java

[解決済み] Jackson を使用してオブジェクトの配列をデシリアライズする方法

2022-03-21 07:43:06

質問

その ジャクソン・データ・バインディング・ドキュメント は、Jackson が "サポートされているすべての型の配列のデシリアライズに対応していることを示していますが、このための正確な構文がわかりません。

単一のオブジェクトの場合、私はこうします。

//json input
{
    "id" : "junk",
    "stuff" : "things"
}

//Java
MyClass instance = objectMapper.readValue(json, MyClass.class);

では、配列の場合はどうかというと、こうしたい。

//json input
[{
    "id" : "junk",
    "stuff" : "things"
},
{
    "id" : "spam",
    "stuff" : "eggs"
}]

//Java
List<MyClass> entries = ?

どなたか、魔法のミッシングコマンドをご存じないでしょうか?そうでない場合、解決策は何ですか?

解決方法は?

まず、マッパーを作成します。

import com.fasterxml.jackson.databind.ObjectMapper;// in play 2.3
ObjectMapper mapper = new ObjectMapper();

Arrayとして。

MyClass[] myObjects = mapper.readValue(json, MyClass[].class);

リストとして

List<MyClass> myObjects = mapper.readValue(jsonInput, new TypeReference<List<MyClass>>(){});

List 型を指定するもう一つの方法。

List<MyClass> myObjects = mapper.readValue(jsonInput, mapper.getTypeFactory().constructCollectionType(List.class, MyClass.class));