说我有以下YAML文件:
-
key1: value
# and so on...
key99: value
key100:
subkey1: value
# and so on...
subkey100: value
-
key1: value
# and so on...
key99: value
key100:
subkey1: value
# and so on...
subkey100: SOME DIFFERENT VALUE
Run Code Online (Sandbox Code Playgroud)
处理大量相同数据的自然方式是使用锚点,并覆盖更改的键.
问题是,这里的子项不同.有没有一种简单的方法来引用key100['subkey100']
改变了?或者我必须在每个级别使用一系列锚点?
即,是否有简写:
- &anchor
key1: value
# and so on...
key99: value
key100: &subanchor
subkey1: value
# and so on...
subkey100: value
-
<<: *anchor
key100:
<<: *subanchor
subkey100: SOME DIFFERENT VALUE
Run Code Online (Sandbox Code Playgroud)
Jas*_*ark 10
如果我正确理解了这个问题,我认为规范不支持覆盖锚定节点的元素.
在阅读规范(版本1.2,但1.1表示相同)时,第7.1节别名节点声明(强调我的):
先前序列化节点的后续出现被表示为别名节点.必须通过锚标记节点的第一次出现,以允许后续出现作为别名节点.
别名节点由"*"指示符表示.别名是指具有相同锚点的最近的前一节点.别名节点使用先前未在文档中出现的锚点是错误的.指定任何别名节点未使用的锚点并不是错误.
请注意,别名节点不得指定任何属性或内容,因为这些属性或内容在第一次出现时已指定.
这里有两点:
"以前序列化的节点" - 此措辞表明别名旨在表示原始节点的另一个出现,而不仅仅是原始节点中的数据.换句话说,它代表相同的对象,而不是副本.
如果别名不能包含任何内容(第二个粗体部分),则无法以问题中建议的方式指定覆盖.
所以我对规范的解释是你根据规范不能这样做.
但是 - 如果将示例(第二个代码块)从原始文件粘贴到此在线工具(您可能希望取消选中"规范"),该工具会按照问题中的预期解释它,复制原始内容但覆盖子密钥100.与此在线解析器一样,此YAML Lint工具也是如此.
所以它似乎在实践中起作用,但我在规范中找不到对它的支持.
归档时间: |
|
查看次数: |
5932 次 |
最近记录: |