配列に内部ラッパーオブジェクトがあるという点で、データに問題があります。おそらく、Vendor
オブジェクトは、、、を処理するように設計されてid
いますがname
、company_id
これらの複数のオブジェクトのそれぞれも、単一のプロパティを持つオブジェクトにラップされていますvendor
。
Jackson Data Bindingモデルを使用していると仮定しています。
その場合、次の 2 つの点を考慮する必要があります。
1 つ目は、特別な Jackson 構成プロパティを使用することです。Jackson - 1.9 以降、Jackson の古いバージョンを使用している場合、これは利用できない可能性があると思います - provides UNWRAP_ROOT_VALUE
. これは、破棄したい最上位の単一プロパティ オブジェクトに結果がラップされている場合のために設計されています。
だから、遊んでください:
objectMapper.configure(SerializationConfig.Feature.UNWRAP_ROOT_VALUE, true);
2 つ目は、ラッパー オブジェクトを使用することです。外側のラッパー オブジェクトを破棄した後でも、Vendor
オブジェクトが単一のプロパティ オブジェクトにラップされるという問題が残っています。これを回避するには、ラッパーを使用します。
class VendorWrapper
{
Vendor vendor;
// gettors, settors for vendor if you need them
}
同様に、 を使用する代わりにUNWRAP_ROOT_VALUES
、外側のオブジェクトを処理するラッパー クラスを定義することもできます。Vendor
正しい,オブジェクトがあると仮定すると、次のようVendorWrapper
に定義できます。
class VendorsWrapper
{
List<VendorWrapper> vendors = new ArrayList<VendorWrapper>();
// gettors, settors for vendors if you need them
}
// in your deserialization code:
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readValue(jsonInput, VendorsWrapper.class);
VendorsWrapper のオブジェクト ツリーは、JSON に似ています。
VendorsWrapper:
vendors:
[
VendorWrapper
vendor: Vendor,
VendorWrapper:
vendor: Vendor,
...
]
最後に、Jackson Tree Modelを使用して、これを に解析しJsonNodes
、外側のノードを破棄して、 のそれぞれJsonNode
について、次のArrayNode
ように呼び出します。
mapper.readValue(node.get("vendor").getTextValue(), Vendor.class);
これによりコードが少なくなる可能性がありますが、2 つのラッパーを使用する場合と同じように扱いにくいようです。