[英]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 定义描述了Animal
的Map
,而您的 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.