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 输入时不会得到处理。
考虑这个 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 输入时不会得到处理。