2012-10-11 110 views
1

我從Web服務中取回JSON。有時JSON中的屬性會以對象的形式返回,而其他時候則是對象的數組。我如何編寫我要反序列化的Java類,以便與Jackson的ObjectMapper正確地反序列化此屬性?我可以使用ObjectMapper來幫助嗎?Jackson反序列化JSON,間歇性地有一個陣列

與對象 JSON:

"results": { 
    "account": { 
     "expiration": "2012-11-16" 
    } 
} 

JSON與收集

"results": { 
  "account": [{ 
    "expiration": "2012-11-16" 
    }] 
} 
+0

如何與我們分享您的「非工作」解決方案? – aviad

+0

請參閱[本](http://stackoverflow.com/q/12450404/823393)我的問題,我不得不處理多態對象。基本上你必須用自己的代碼來增強解串器。 – OldCurmudgeon

+0

在這種特殊情況下,不應該添加自定義的反序列化器;雖然IMO這樣的非OO JSON結構有點不好。 – StaxMan

回答

4

您需要標記屬性作爲Java數組或Collection,並啓用功能ACCEPT_SINGLE_VALUE_AS_ARRAY:

ObjectMapper mapper = new ObjectMapper(); 
mapper.enable(DeserializationFeature. ACCEPT_SINGLE_VALUE_AS_ARRAY); 
ResultOb ob = mapper.readValue(jsonInput, ResultOb.class); 

並且如果遇到單個JSON對象,則會將其視爲單元素JSON數組。

+0

Doh。我通過java文檔查看了傑克遜1.7.9的配置,但沒有看到任何。我應該總是看最新的文檔。謝謝! – Glide

+0

的確如此,這是相對較新的功能。 – StaxMan