Yaml 合并忽略锚点中定义的属性

Yaml merge ignoring properties defined in anchor

考虑这个 yaml

- node_1:
    properties: &node_1_prop
      role: management
      layer: 1

- node_2:
    properties:
      level:  24
      <<: *node_1_prop

我正在尝试使用 snakeyaml 库创建节点图,我希望 node_1 有两个属性,node_2 有三个属性,例如 this.

Path yamlPath = Paths.get( "nodes.yaml");
InputStream yamlStream = Files.newInputStream(yamlPath);
StreamReader sreader = new StreamReader(new UnicodeReader(yamlStream));
Composer composer = new Composer(new ParserImpl(sreader), new Resolver());
Node rootNode = composer.getSingleNode();

snakeyaml 的输出节点图将 << 显示为 属性 for node_2

代码示例显示 Git 上的结果。

编辑:

如果我按如下方式定义 yaml,则节点构建良好:

- node_1:
    properties: &node_1_prop
      role: management
      layer: 1

- node_2:
      <<: *node_1_prop

但是我的要求不仅仅是按原样复制属性,还需要有额外的属性。

你没有完全加载你的 YAML,你只编写它(参见 graph in the YAML 1.1 spec SnakeYaml 实现)。

撰写步骤解析别名,但保留标签 - 标签在构造期间解析。合并密钥已定义 as a tag,因此在您编写 YAML 输入时不会得到处理。