首页 > 解决方案 > 使用杰克逊将单例json数组反序列化为相同类型的pojo?

问题描述

是否有任何开箱即用的方法可以将单例 json 数组反序列化为相同类型的 java pojo?

例如,我想要以下 json:

[{"eventId": "event1", "timestamp": 1232432132}]

反序列化为以下java POJO:

class Event {
  String eventId;
  long timestamp;
}

我尝试使用以下类:

class Event {
  String eventId;
  long timestamp;

  public Event(@JsonProperty("eventId") String event, 
               @JsonProperty("timestamp") long timestamp)
    //fields init
  }

  @JsonCreator
  public Event(List<Event> singletonList)
    //take first element in list and set its fields on this
  } 

但这失败了: om.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of java.util.ArrayList out of FIELD_NAME token

我知道我可以用类似这样的其他类来包装 Event POJO:

class EventWrapper {
   Event event;

   @JsonCreator   
   EventWrapper(List<Event> events) {
     this.event = events.get(0);
   }  

但我想避免这种情况(以及避免自定义反序列化器)

任何帮助都感激不尽。

标签: javajsonjacksondeserialization

解决方案


您可以通过以下方式获取列表,而不是创建其他类,

    import com.fasterxml.jackson.databind.ObjectMapper;
    ObjectMapper mapper = new ObjectMapper();
    List<Event> myObjects = Arrays.asList(mapper.readValue(json, Event[].class));

推荐阅读