Jackson JSON反序列化列表

use*_*700 1 java json jackson

我想JSON string对两种消息使用相同的POJO 反序列化。看看下面的消息

{
"success": true,
"data": [
    {
        "id": 2,
        "comments": null
    },
    {
        "id": 3,
        "comments": null
    }
]
}
Run Code Online (Sandbox Code Playgroud)

数据是数组,但有时数据是单个对象:

{
"success": true,
"data":
    {
        "id": 2,
        "comments": null
    }
}
Run Code Online (Sandbox Code Playgroud)

我的POJO看起来像这样:

public void setData(List<Object> data)
{
    this.data = data;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法使用相同的类反序列化第二条消息(数据不是数组)?

亲切的问候,里卡多

loe*_*sak 5

我还没有使用过它,但是有一个反序列化功能可以在反序列化上实现:

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

我不确定是否可以针对特定领域执行此操作。似乎是全有或全无的事情。

希望这可以帮助!