杰克逊JSON反序列化列表

时间:2016-08-24 20:33:20

标签: java json jackson

我想针对两种消息使用相同的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;
}

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

亲切的问候, 里卡多

1 个答案:

答案 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

我不确定是否有办法为特定字段执行此操作。似乎是一种全有或全无的东西。

希望这有帮助!