首页 > 解决方案 > 如何使用 Snake YAML Java 加载多个 yaml 文件?

问题描述

我在一个目录中有几个 yaml 文件。如何将它们全部加载到同一个 YAML 对象(映射)中?

# a.yaml
a: ValueA
c: ValueC

# b.yaml
a: ValueAA
b: ValueB

我要a.yaml,后跟b.yaml。结果将是:

{ a: ValueAA, b: ValueB, c: ValueC }

我可以这样做的一种方法是将 a.yaml 和 b.yaml 的内容显式连接到单个字符串中,然后加载合并的字符串。我想知道是否可以避免这种情况,只需使用 load() API 依次加载 2 个 yaml 文件。

标签: javayamlsnakeyaml

解决方案


我不知道 SnakeYAML 的详细信息,但你不能只连接两个文件a.yamlb.yaml,即使它们都在根级别有映射。这样做你会在你的映射中得到一个重复的键,并且根据 YAML 1.2(和 1.0)规范,你不允许有重复的键,并且 1.1 规范声明你应该在重复键和第一个值上收到警告(你表示你想要第二个)。

所以你必须在 Java 中解决这个问题,你可以通过从它们各自的文件加载文档并使用 from 更新加载的数据结构a.yaml来实现b.yaml

您还可以将文件连接成一个包含多个文档的文件,但为此,这些文档必须由指令结束指示符 ( ---) 或文档结束指示符 ( ...) 分隔。您通常需要使用特殊的“load-all”函数来加载这样的多文档文件,从而生成从映射加载的数据结构列表(或迭代器),然后您可以将其合并。

如果您以编程方式制作多文档文件,请确保检查文件是否以换行符结尾,否则追加---和下一个文件不会提供您期望的多文档流。


推荐阅读