yaml锚内的映射?

时间:2018-07-06 17:13:02

标签: yaml config pyyaml

我基本上是在yaml文件中尝试实现以下目标

Classroom:
    year: &year 5
    subject: &subject Math
    classroom_name: classroom_*year_*subject

我期望的结果

'Classroom': {
    'year': 5
    'subject': 'Math'
    'classroom_name': 'classroom_5_Math'
}

当我加载它时(通过Python,但我认为这没有改变吗?)。

我要得到的东西

'Classroom': {
    'year': 5
    'subject': 'Math'
    'classroom_name': 'classroom_*year_*subject'
}

我在做什么错/我该如何改善?

2 个答案:

答案 0 :(得分:0)

我最终仅使用custom tags - StackOverflow Post并为该特定情况定义了自己的处理程序。我认为它的伸缩性不是很高(无法自我参考),但我们会看到

答案 1 :(得分:0)

问题是您的期望不正确。在the YAML specification中,它明确指出:

  

在表示图中,一个节点可能出现在多个集合中。序列化此类数据时,节点的首次出现是由锚点标识的。随后的每个事件都被序列化为一个别名节点,该节点返回该锚点

您的classroom_*year_*subject是一个节点,该标量将作为字符串加载,它恰好有两个嵌入的星号,除了它们出现在标量的开头({ {3}})。

因此,该节点不是由标量(节点)组成,后跟您似乎想(希望)的两个别名。只有完整的节点才能被别名。