我想在块标量中注入一个YAML字段值。我认为可以引用这样的别名:
exclamationMark: &exclamationMark "!"
questionMark: &questionMark "?"
text: |-
Hi *exclamationMark
What's your name *questionMark
然后获得以下JSON输出:
{
"exclamationMark": "!",
"questionMark": "?",
"text": "Hi !nWhat's your name ?"
}
但很明显,别名并没有被这样解释,我得到的是JSON输出:
{
"exclamationMark": "!",
"questionMark": "?",
"text": "Hi *exclamationMarknWhat's your name *questionMark"
}
是否存在块标量中绝对不支持别名的技巧?
这与块标量没有什么特别的关系,YAML不是一种编程语言,也不支持字符串串联或插值等功能。
YAML描述了节点的有向图。每个节点都可以有一个锚点,如果有,可以通过别名引用。块标量(和其他标量语法(解析到的标量节点包含标量内容。标量内容是文本的,永远不会包含对其他节点的引用。
引用其他节点的节点是集合节点,即包含对其他节点的引用列表的序列,以及包含键值对列表的映射,其中键和值都是节点引用。
因此,可以做的是
exclamationMark: &exclamationMark "!"
questionMark: &questionMark "?"
text: !concat ["Hi ", *exclamationMark, "nWhat's your name ", *questionMark]
这使得text
是一个标量序列,其中一些是按字面意思给出的,另一些是通过别名给出的。CCD_ 2是本地标签并且可以通过加载YAML的代码来处理。这可能允许您实现所需的语义,尽管您需要自己编写代码。