在Jackson的单个文件中反序列化来自多个YAML文档的POJO

Dat*_*han 9 java yaml jackson

我有一个YAML文件,看起来像这样:

---
name: Sam
tags:
    -   Dev
    -   Java
----
name: Bob
tags:
    -   PM
Run Code Online (Sandbox Code Playgroud)

我想使用Jackson来反序列化文件中的所有文档,但是我没有看到使用普通文件的方法ObjectMapper.如果我使用YAMLFactory为我的文件创建一个解析器,我可以单步执行所有标记,因此解析器显然能够处理多个文档 - 但是如何将它们绑在一起? 看起来我的YAMLFactory创建的解析器只解析文件中的单个文档.

我也尝试直接创建YAMLParser并使用ObjectMapper#readValue(JsonParser, Class),但ObjectMapper耗尽了整个YAMLParser来反序列化单个实例.

zco*_*rts 12

这是几年后,但值得指出的是,这是支持的.杰克逊的语义略有不同,可能是因为它的JSON起源.这可以通过使用MappingIteratorfrom 来实现ObjectMapper.

YAMLFactory yaml;
ObjectMapper mapper;

YAMLParser yamlParser = yaml.createParser("file-with-multiple-docs.yaml")
List<ObjectNode> docs = mapper
      .readValues<ObjectNode>(yamlParser, new TypeReference<ObjectNode> {})
      .readAll();
Run Code Online (Sandbox Code Playgroud)

ObjectNode如果需要,请替换为您自己的POJO.

  • 好的!当我问这个问题时,这正是我想要的,尽管我很遗憾地说它对我不再有用,因为这些天我大多不在 Java 中工作。我没有接受之前的答案,而是接受你的答案——希望这会帮助出现在这里的任何人找到正确的前进方向。 (2认同)