天天看點

jackson json 嵌套對象_java – Jackson – 如何處理(反序列化)嵌套JSON?

您的資料有問題,因為您在數組中有内部包裝器對象。假定您的Vendor對象被設計為處理id,name,company_id,但是這些多個對象中的每一個也被包裝在具有單個屬性供應商的對象中。

我假設你使用的是Jackson Data Binding模型。

如果是這樣,那麼有兩件事要考慮:

第一個是使用一個特殊的Jackson配置屬性。 Jackson – 從1.9我相信,如果你使用的老版本的Jackson – 提供UNWRAP_ROOT_VALUE,這可能不可用。它的設計為您的結果包裝在頂級單一屬性對象,你想要丢棄的情況。

是以,玩弄:

objectMapper.configure(SerializationConfig.Feature.UNWRAP_ROOT_VALUE, true);

第二個是使用包裝器對象。即使在丢棄外部包裝器對象之後,仍然存在将Vendor對象包裝在單一屬性對象中的問題。使用包裝器來解決這個問題:

class VendorWrapper

{

Vendor vendor;

// gettors, settors for vendor if you need them

}

類似地,您也可以定義一個包裝類來處理外部對象,而不是使用UNWRAP_ROOT_VALUES。假設你有正确的Vendor,VendorWrapper對象,你可以定義:

class VendorsWrapper

{

List vendors = new ArrayList();

// 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,丢棄外部節點,對于ArrayNode中的每個JsonNode,調用:

mapper.readValue(node.get("vendor").getTextValue(), Vendor.class);

這可能導緻更少的代碼,但似乎沒有使用兩個包裝器笨拙。