当前位置: 首页 > 知识库问答 >
问题:

使用jackson将单例json数组反序列化为同类型的pojo?

芮雪风
2023-03-14

是否有任何开箱即用的方法将单例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.MismatchedInpuExc的:无法反序列化FIELD_NAME令牌java.util.ArrayList的实例

我知道我可以用这样的其他类包装事件POJO:

class EventWrapper {
   Event event;

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

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

任何帮助都将不胜感激。

共有1个答案

白通
2023-03-14

您可以按照此操作获取List,而不是创建额外的类,

    import com.fasterxml.jackson.databind.ObjectMapper;
    ObjectMapper mapper = new ObjectMapper();
    List<Event> myObjects = Arrays.asList(mapper.readValue(json, Event[].class));
 类似资料:
  • 我收到来自第3方服务提供商的JSON响应,其中包含一系列对象。当我尝试使用Jackson api反序列化JSON时。我收到以下异常 我的回答是 我的POJO课是这样的 我正在尝试使用以下代码反序列化JSON 如果我试着去做 它在BEGIN_对象本身失败。 如何使用数组读取和反序列化JSON。我应该编写自己的反序列化器吗? 编辑如果我使用JSON字符串而不是流,那么我就能够取回所有Java对象。但为

  • 我在使用spring反序列化json数组时遇到一个问题。我有来自服务的json响应: 我使用spring WebFlux的新WebClient获得了这个json,代码如下: AccountorDerList AccountOrder是一个映射字段的简单pojo。 实际上,当我点击get时,它说: 如何使用新的webflux模块正确反序列化json?我做错了什么? 更新05/02/2018 两个答案

  • 问题内容: 我在反序列化一些json数据,获取InvalidCastExceptions之类的问题。 谁能指出我正确的方向? 这是我要反序列化的json; [{“ OrderId”:0,“名称”:“摘要”,“ MaxLen”:“ 200”},{“ OrderId”:1,“名称”:“详细信息”,“ MaxLen”:“ 0”}] 这是我的代码; 问题答案: OrderId是json中的一个Int(请注

  • 问题内容: 我正在尝试将json数据反序列化为模型类,但是失败了。这是我的工作: 这是我的模型的样子: 您可以看到我到达这里的Json:http : //api.worldbank.org/incomeLevels/LIC/countries? format=json 这是我得到的错误: 无法将JSON数组反序列化为“ Mvc4AsyncSample.Models.CountryModel”类型。

  • 这是一个重复问题,因为下面的问题要么乱七八糟,要么根本没有回答: Jackson永远无法处理泛型类型T,它认为它是JavaType的映射,但它会发现对象类型构造函数参数,因为类型擦除并抛出错误。这是杰克逊的错误,还是我做错了什么?TypeReference或JavaType的显式规范还用于什么?

  • 问题内容: 我希望这个问题最终能找到一个答案,使之永远清楚。 有模特儿: JSON输入: 以及两种反序列化泛型类型的推荐方法: 要么 Jackson永远无法处理通用类型T,它认为这是JavaType的Map,但由于类型擦除而找到了对象类型构造函数参数,并抛出错误。那是杰克逊的臭虫,还是我做错了什么?TypeReference或JavaType的显式规范还有什么用? 问题答案: 您需要在构造函数上添