java - 如何使用 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 文件。
解决方案
我不知道 SnakeYAML 的详细信息,但你不能只连接两个文件a.yaml
和b.yaml
,即使它们都在根级别有映射。这样做你会在你的映射中得到一个重复的键,并且根据 YAML 1.2(和 1.0)规范,你不允许有重复的键,并且 1.1 规范声明你应该在重复键和第一个值上收到警告(你表示你想要第二个)。
所以你必须在 Java 中解决这个问题,你可以通过从它们各自的文件加载文档并使用 from 更新加载的数据结构a.yaml
来实现b.yaml
。
您还可以将文件连接成一个包含多个文档的文件,但为此,这些文档必须由指令结束指示符 ( ---
) 或文档结束指示符 ( ...
) 分隔。您通常需要使用特殊的“load-all”函数来加载这样的多文档文件,从而生成从映射加载的数据结构列表(或迭代器),然后您可以将其合并。
如果您以编程方式制作多文档文件,请确保检查文件是否以换行符结尾,否则追加---
和下一个文件不会提供您期望的多文档流。
推荐阅读
- ios - 分段错误:11 xcode 12.4
- python - 如何从远程 url 获取图像并在不同的视图中显示它们?
- android - 我可以在不将我的应用发布到 Google Play 的情况下测试应用操作吗?
- java - 获取 java.lang.IllegalStateException:节点没有数据类型:org.hibernate.hql.ast.tree.MethodNode
- python - 加速二进制文件打开
- angular - 角度的侧边菜单
- r - 使用箱线图去除异常值
- power-automate - 如何在电源自动化中多次出现字符之前获取字符串
- sql-server - 如何从 MS SQL 中的联合选择继续运行总计计算
- python - 主页上的产品未正确显示(Django、Django Rest 和 React)