2011-01-29 20 views
2

我JSON如下所示:在基於變量的Jackson JSON中使用不同的bean類?

[{ 
    'kind':'1', 
    'value1': 'foo', 
    'value2': 'bar', 
    ... 
}, 
{ 
    'kind':'2', 
    'value1': 'foo', 
    'value2': 'bar', 
    ... 
} 
..] 

基本上用相同的變量對象的列表。在我的代碼中,我想創建一個包含這些對象的A類的ArrayList。但是,我希望每個對象都是一個或兩個子類,具體取決於'kind'值。

我該如何做到這一點?

謝謝!

回答

1

這就是傑克遜所謂的「多態類型處理」。有一個很好的解釋如何做到這一點here。當你序列化它時,你需要告訴Jackson將類名放入JSON中,並在反序列化時使用該類名。

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, 
       include=JsonTypeInfo.As.PROPERTY, property="kind") 

[來源:@StaxMan(如下圖)。]

如果你沒有在JSON格式控制,你可以使用傑克遜將它反序列化到一些常見的中間,這是通過註解來實現對象,然後編寫代碼,從中創建所需的子類對象。或者,使用json.org庫將JSON字符串反序列化爲org.json.JSONObject,然後編寫代碼以基於JSONObject的屬性構建所需的對象。

+0

正確,這是使用的機制。在這種情況下,要使用的屬性名稱將會是「kind」,所以它會像@JsonTypeInfor(use = JsonTypeInfo.Id.NAME,include = JsonTypeInfo.As.PROPERTY,property =「kind」)。也;而不是類名稱,看起來像使用邏輯名稱(「1」,「2」),因此使用'JsonTypeInfo.Id.NAME'。 – StaxMan 2011-01-30 04:33:37

相關問題