我有一个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
您的YAML定义与您的对象模型不匹配。
YAML定义描述了一个Map
of Animal
,而您的对象模型期望一个List
of 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] 删除。
我来说两句