繁体   English   中英

反序列化 Yaml 对象列表

[英]Deserialise Yaml List of Objects

我有一个 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 class 看起来像这样

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

   // getters, setters, constructors
}

我正在尝试按如下方式使用 jackson

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

您的 YAML 定义与您的 object model 不匹配。

YAML 定义描述了AnimalMap ,而您的 object model 需要一个Animal List

尝试将您的 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>>(){});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM