【问题标题】:Deserialize wrapped list using Jackson使用 Jackson 反序列化包装列表
【发布时间】:2015-02-26 06:27:32
【问题描述】:

我有一个这样的 JSON 对象:

{"geonames":[
   {"countryId":"2017370",
    "adminCode1":"73"},
   {"countryId":"2027370",
    "adminCode1":"71"},
    ...]}

我如何将这个对象直接反序列化为List<GeoName>,忽略第一层(地理名称包装器),而不是将包含List<GeoName> 的包装器对象反序列化为@JsonProperty("geonames")

【问题讨论】:

  • 如果您从任何休息端点获取此 JSON,然后尝试使用 spring rest 模板,它具有消息转换器,将负责编组和解组

标签: java json list jackson


【解决方案1】:

使用带有根名称的ObjectReader

ObjectMapper mapper = new ObjectMapper();
ObjectReader reader = mapper.reader(new TypeReference<List<GeoName>>() {}).withRootName("geonames");
List<GeoName> list = reader.readValue(json);

【讨论】:

  • 有没有办法通过注释来实现这一点?没有实例化阅读器?
  • @localhost 直接反序列化到 List&lt;GeoName&gt; 时不。如果您可以将根名称更改为List,则可以使用mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); 并直接使用映射器。
  • @localhost 但是ObjectReader 有什么问题?无论如何,这些都是在内部生成的。
  • 无法更改根名称。谢谢回答,我接受它:)
猜你喜欢
  • 2016-07-09
  • 2018-08-15
  • 2022-01-22
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 2021-11-08
  • 2016-08-05
  • 2019-10-25
相关资源
最近更新 更多