YAML锚点作为URL字符串中的占位符

时间:2016-12-13 13:14:14

标签: yaml snakeyaml property-placeholder

尝试以添加方式使用锚点, 以下YAML代码不起作用,但可以解释我想要它做什么

  endpoint:
    data.updates.index.name: &UPDATES-INDEX-NAME "data-updates"
    meta.data.type.name: &DATA-TYPE-NAME "meta-data"
    last.run.type.name: &RUN-TYPE-NAME "lastrun"
    search.ctx: *UPDATES-INDEX-NAME "/" *DATA-TYPE-NAME "/_search"
    search.lastrun: *UPDATES-INDEX-NAME "/" *RUN-TYPE-NAME "/_search"
    update.lastrun: *UPDATES-INDEX-NAME "/" *RUN-TYPE-NAME "/"

a1:& anchor1"你好" a2:& anchor2" moon" property:* anchor1" - " * anchor2

财产应该产生"你好月亮" 它有可能吗?尝试使用$ {}而不是锚点

1 个答案:

答案 0 :(得分:0)

YAML无法做到这一点。锚/别名功能用于序列化循环数据结构,而不是用于重复使用表达式中的值。在YAML中,没有表达式(好吧,除了YAML 1.1的!!merge标签,它已经过时,在这里没有帮助)。您需要在加载时或加载后对数据执行所有操作。

可能的方法:

endpoint:
  data.updates.index.name: "data-updates"
  meta.data.type.name: "meta-data"
  last.run.type.name: "lastrun"
  search.ctx: "{{data.updates.index.name}}/{{meta.data.type.name}}/_search"
  search.lastrun: "{{data.updates.index.name}}/{{last.run.type.name}}/_search"
  update.lastrun: "{{data.updates.index.name}}/{{last.run.type.name}}/"

如您所见,我使用了非YAML标记(在这种情况下,类似小胡子)作为占位符。您需要在加载后对数据进行后处理,以便用适当的内容替换占位符。