You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 06:19:59