如何在YAML中将数组覆盖为空?

4

假设我有一个名为 original.yml 的 YML 文件,其中包含一个对象数组

array_in_yml:
- start: 1
- middle: 2
- end: 3

我已将其包含在modified.yml中。

!include "original.yml" 
array_in_yml: []

当我加载modified.yml文件时,我希望这个数组为空,但它似乎有3个值,就像original.yml一样。如何强制/覆盖使该数组为空?


你实际上在使用 yaml-cpp 吗?我不认为它支持 !include 功能,所以如果它加载了3个值,我会感到惊讶。如果是这样,请发布能够显示问题的工作源代码。 - Jesse Beder
modified.yml 不是一个有效的 YAML 文件,您不能在文件的顶层同时拥有标记为 !include 的标量字符串 "original.yml",以及指示映射的键值对 (array_in_yml: [])。您应该包括一个最小的工作程序来展示您所看到的内容。 - Anthon
你的 original.yml 文件没有对象数组。在顶层,它有一个映射,其中包含一个键值对。该值是一个序列,其中所有元素都是映射,每个映射都有一个键值对。没有数组,也没有对象 - Anthon
@Anthon,我使用JSON(对象,数组)和JSON Schema(属性)的术语。YAML与JSON有很好的关系。我们中的许多人使用YAML作为JSON的速记,并使用JSON Schema来验证或描述YAML文档。像Swagger-OpenAPI这样的标准已经变得非常普遍。由于最初的问题使用了JSON,所以我认为坚持使用它并不会引起混淆。但是,如果您认为JSON抽象妨碍了理解和回答问题,那么您正确地将我们引导回到YAML的本机术语和概念。 - Ted Epstein
谢谢您的建议。我刚刚意识到覆盖机制是我们内部API提供的一种方法,它是yaml-cpp的一个包装器。我已经解决了我的问题。 - mkporkodi
显示剩余2条评论
1个回答

2

关于!include的讨论似乎偏离了实际问题。让我们假设以某种未知的方式,!include行被替换为original.yml中的内容。我们将会有:

array_in_yml:
- start: 1
- middle: 2
- end: 3
array_in_yml: []

这不是有效的YAML,因为字典中的每个键都必须是唯一的,但你使用了两次键array_in_yml。你的YAML处理器可能会忽略这个问题,并将第一个值(其中包含三个项目的序列)分配给键array_in_yml
现在重要的部分是:没有办法在YAML中修改先前给定的值。你不能用不同的值覆盖以前给出的值。你想做的事情超出了YAML规范,你需要一些合并工具来替换它们。

谢谢您的想法。我刚刚意识到覆盖机制是我们内部API提供的一种方法,它是yaml-cpp的包装器。 - mkporkodi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接