如何在YAML中仅覆盖别名的深层键而保留其余节点?
YAML嵌套节点合并实现方案
问题场景
现有如下YAML代码:
one: &one sub: sub1: hi sub2: bye two: <<: *one sub: sub2: no
其实际解析结果为:
one: sub: sub1: hi sub2: bye two: sub: sub2: no
但期望得到的解析结果是保留one.sub.sub1的值,仅覆盖指定的sub2:
one: sub: sub1: hi sub2: bye two: sub: sub1: hi sub2: no
当前核心问题:YAML的合并标记<<:仅针对顶层映射键进行合并,当目标映射中存在同名顶层键(如示例中的sub)时,会直接覆盖整个节点,而非合并该节点下的子项。
解决方案
要实现嵌套子节点的合并,需将锚点定义在需要继承的子节点层级,而非整个父节点,同时在目标节点的子映射中使用合并标记。
修改后的YAML代码如下:
one: sub: &sub_template sub1: hi sub2: bye two: sub: <<: *sub_template sub2: no
解析结果
one: sub: sub1: hi sub2: bye two: sub: sub1: hi sub2: no
深层结构扩展
针对更深层次的嵌套结构,只需遵循相同逻辑:将锚点定义在需要被继承合并的具体子映射上,在目标子映射中通过<<:引入锚点后,再覆盖需要修改的键即可。
例如三层嵌套场景:
base: level1: level2: &deep_template key1: default key2: original key3: init custom: level1: level2: <<: *deep_template key2: modified
解析后custom.level1.level2会保留key1和key3的默认值,仅修改key2。
内容的提问来源于stack exchange,提问作者user3310334
相关产品推荐
相关产品推荐

