我想针对两种消息使用相同的POJO反序列化JSON
string
。看一下下面的消息
{
"success": true,
"data": [
{
"id": 2,
"comments": null
},
{
"id": 3,
"comments": null
}
]
}
数据是数组,但有时数据是单个对象:
{
"success": true,
"data":
{
"id": 2,
"comments": null
}
}
我的POJO看起来像这样:
public void setData(List<Object> data)
{
this.data = data;
}
有没有办法使用相同的类反序列化第二条消息(数据不是数组)?
亲切的问候, 里卡多
答案 0 :(得分:2)
我还没有使用它,但是有一个反序列化功能允许反序列化:
ACCEPT_SINGLE_VALUE_AS_ARRAY(默认值:false)
允许从非JSON数组值自动转换为单元素数组和集合(添加隐式“数组包装器”):这有时是互操作性所必需的,因为某些库和框架在序列化单元素时会省略JSON数组阵列。
看起来也有相反的序列化(将单个元素数组写入非JSON数组
UNWRAP_SINGLE_VALUE_ARRAYS(默认值:false)(自2.4起)
允许从单元素数组自动转换为非JSON数组值:这类似于ACCEPT_SINGLE_VALUE_AS_ARRAY功能,但工作方式相反(即如果您的绑定属性不是数组或集合,则JSON中的单值数组可以绑定到该属性)。如果JSON值包含数组中的多个元素,则反序列化仍将失败。
请参阅https://github.com/FasterXML/jackson-databind/wiki/Deserialization-Features
我不确定是否有办法为特定字段执行此操作。似乎是一种全有或全无的东西。
希望这有帮助!