2011-06-27 74 views
3

我有一個JSON對象,我沒有控制和想要將其映射到預先創建的Java對象。 JSON對象中有一個屬性可以是URL,也可以是JSONArray。傑克遜JSON到Java映射相同attrubute與不同的數據類型

Class SomeClass { 

    private URL items; 

    public URL getURL() { 
     return items; 
    } 

    public void setURL(URL url) { 
     this.items = url; 
    } 
} 

下面是JSON:

方案A:

{ 
... 
    items: http://someurl.abc.com/linktoitems, 
... 
} 

OR

情況B

{ 
... 
    items: [ 
      { "id": id1, "name": name1 }, 
      { "id": id2, "name": name2 } 
      ] 
... 
} 

如果我創建了POJO映射情況A ,情況B失敗,反之亦然。總之,有沒有辦法將JSON屬性映射到具有不同數據類型的POJO字段?在這種情況下,我將創建名爲POJO兩個獨立的領域,

private URL itemLink; 
private Item[] itemList; 

回答

2

這取決於具體的細節,但如果你問的是,如果有可能或者JSON字符串或JSON陣列映射到Java屬性,是的,這可以做到。

明顯的方法是定義一個處理兩種JSON輸入的自定義解串器。 但是,也可以通過設置屬性(它可以從JSON對象工作)和具有標記爲單個字符串參數的構造函數或靜態單個字符串參數工廠方法來構建Java類型@JsonCreator。

另一種可能性是使用可以從任何JSON反序列化的中間類型:可以從任何JSON創建java.lang.Object和JsonNode(「JSON樹」)實例。從這個值你需要做手動轉換;最有可能在setter中,如下所示:

public void setItems(JsonNode treeRoot) { .... } 

但是,不起作用的是定義具有相同名稱的兩個屬性。

我不完全遵循的一件事是你將如何從List轉換爲URL。所以也許你確實需要兩個獨立的內部區域;並且setter只會分配給其中的一個(而getter會返回一個值)。

+0

感謝您的回覆。但是,我手動識別鍵的數據類型並將值分配給適當的對象(URL或List) – user788052