反序列化Yaml对象列表

mwp2:

我有一个Yaml文件,其数据如下所示:

dog:
  animalId: dog00
  animalName: Dog
  animalFamily: Canidae
cat:
  animalId: cat00
  animalName: Cat
  animalFamily: Felidae
elephant:
  animalId: elpnt
  animalName: Elephant
  animalFamily: Elephantidae
...

更新:我无法控制yaml文件)

如何在Java中将其反序列化为“动物”对象列表

我的Animal课看起来像这样

public class Animal {
   private String animalId;
   private String animalName;
   private String animalFamily;

   // getters, setters, constructors
}

我正在尝试使用杰克逊如下

ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
CollectionType listType = mapper.getTypeFactory().constructCollectionType(ArrayList.class, Animal.class);

List<Animal> animals = mapper.readValue(new File("src/main/resources/animals.yaml"), listType);

但是我得到了错误

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of 'java.util.ArrayList<Animal>' out of START_OBJECT token
马丁·德维勒斯(Martin Devillers):

您的YAML定义与您的对象模型不匹配。

YAML定义描述了一个Mapof Animal,而您的对象模型期望一个Listof Animal

尝试将您的YAML文件更改为:

-
  animalId: dog00
  animalName: Dog
  animalFamily: Canidae
-
  animalId: cat00
  animalName: Cat
  animalFamily: Felidae
-
  animalId: elpnt
  animalName: Elephant
  animalFamily: Elephantidae

或尝试更改Java代码,使其反序列化为Map<String, Animal>

Map<String, Animal> animals = mapper.readValue(new File("src/main/resources/animals.yaml"), new TypeReference<Map<String, Animal>>(){});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章