2012-10-11 48 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