如何在YAML中使用引用?

时间:2016-09-15 17:50:13

标签: python yaml

我有这个YAML:

app_name: my_app
version:
  1.0:
    path: /my_app/1.0
  2.0:
    path: /my_app/2.0

是否有可能以某种方式避免输入" my_app"和它的版本,而是通过使用某种引用从YAML本身读取?

我有这样的想法:

app_name: my_app
version:
  1.0:
    path: /@app_name/$key[-1]
  2.0:
    path: /@app_name/$key[-1]

最后,我打算将其读入Python词典。

1 个答案:

答案 0 :(得分:1)

YAML中没有机制可以对标量的子串进行替换,最好的是锚和别名,它们引用整个标量或集合(映射,序列)。

如果你想做这样的事情,你必须在解析YAML之后进行替换,解释各种值并重建数据结构。

有几个例子(包括[so]在这里)取代,其中YAML的某些部分用作字典来替换其他部分。执行此操作时,您可以解析YAML输入一次,替换源,并重新分析该替换的输出。 因为您使用相对引用,这对您不起作用,您需要在已解析的树中进行替换。 另一种方法是修改解析器以从输入中剥离@并动态执行此操作。

在这两种情况下,使用相同的令牌(@)标记一个键来存储"是一个坏主意。它的值(@app_name),以及标记存储密钥本身的密钥(@1.0),以及使用相关值(以两种完全不同的方式@app_name@key[-1])。