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

时间:2019-04-03 06:18:06

标签: java merge yaml snakeyaml

考虑这个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的输出节点图显示<<作为node_2的属性。

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

编辑:

如果我按如下方式定义yaml,则节点的构造会很好:

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

- node_2:
      <<: *node_1_prop

但是,我的要求不仅是照原样复制属性,而且要具有其他属性。

1 个答案:

答案 0 :(得分:3)

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

compose步骤可解析别名,但保留标签-标签在构建过程中被解析。合并键已定义为as a tag,因此在编写YAML输入时不会被处理。