【问题标题】:YAML merge multiply anchors into the same mapYAML 将多个锚点合并到同一个映射中
【发布时间】:2021-01-21 06:35:44
【问题描述】:

不清楚是否可以对同一张地图多次使用YAML merge key operator

困惑来自:

原始规范说:

但他们没有提供示例,我在其他地方也找不到。喜欢:

defs:
- map1: &map1-ref
    key1: val1
- map2: &map2-ref
    key2: val2

config:
  database:
    <<: *map1-ref
    <<: *map2-ref
    key3: val3

哪些主要的解析器支持多重合并(python/ruby/java/node)?

更新 Python 3检查代码:

import yaml
with open("my.yml") as f:
    y = yaml.safe_load(f)
    print(y)

UPDATE 2 @flyx 的建议语法可以用另一种方式编写:

config:
  database:
    <<:
      - *map1-ref
      - *map2-ref
    key3: val3

【问题讨论】:

    标签: yaml


    【解决方案1】:

    虽然快速测试表明 PyYAML 确实支持这一点,但我建议不要这样做,因为在同一个映射中具有多个相同的键 (&lt;&lt;) 违反了核心 YAML 规范(1.1 和 1.2)。

    此外,由于合并键可以将多个映射作为参数,因此没有必要:

    defs:
    - map1: &map1-ref
        key1: val1
    - map2: &map2-ref
        key2: val2
    
    config:
      database:
        <<: [*map1-ref, *map2-ref]
        key3: val3
    

    如果您使用这种语法,问题归结为“哪些实现支持合并键”。我无法给出完整的列表,但我知道的是:

    • 支持:
      • PyYAML
      • Java 的 SnakeYAML
      • 鲁比的心灵
      • Perl 的YAML::PP
      • go-yaml
    • 不支持:
      • yaml-cpp (GH issue)
      • libyaml(因为它的主接口是事件流,级别太低了)
      • NimYAML(我的工作)
      • AdaYaml(我的工作)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      • 2020-08-21
      • 2010-11-13
      • 2014-06-07
      相关资源
      最近更新 更多