【问题标题】:YAML by exampleYAML 示例
【发布时间】:2016-06-01 23:46:58
【问题描述】:

我正在尝试为我的应用设计配置文件格式并选择了 YAML。但是,这(显然)意味着我需要能够定义、解析和验证正确的 YAML 语法!

在配置文件中,必须有一个名为widgets 的集合/序列。这个序列需要包含一组类型化的小部件(可能的类型是fizzbuzzfoobaz)。每个小部件还具有name 和各种其他属性(取决于类型)。例如:

myappconfig.yaml
================
widgets:
  - buzz:
      name: Red Buzz
      isSilly: true
  - buzz:
      name: Blue Buzz
      isSilly: false
  - foobaz:
      name: Abracadabra
      rating: 3000
      specialty: Such YAML much amaze

我的简单问题是:我是否在上面创建了正确/有效的 YAML 文件?意思是,根据我的限制,我在我的实现中正确理解 YAML 语法吗?

【问题讨论】:

    标签: yaml


    【解决方案1】:

    您可以检查 YAML 的语法,例如on this website.

    你的 YAML 被解析为:

    {'widgets': [{'buzz': {'name': 'Red Buzz', 'isSilly': True}}, {'buzz': {'name': 'Blue Buzz', 'isSilly': False}}, {'foobaz': {'rating': 3000, 'name': 'Abracadabra', 'specialty': 'Such YAML much amaze'}}]}
    

    这看起来像你所追求的。

    【讨论】:

      【解决方案2】:

      如果小部件名称应该是唯一的,您可以将其用作键:

      widgets:
        RedBuzz:
          type: buzz
          isSilly: true
        BlueBuzz:
          type: buzz
          isSilly: false
        Abracadabra:
          type: foobaz
          rating: 3000
          specialty: Such YAML much amaze
      

      这个使用按小部件类型分组:

      widgets:
        buzz:
          - RedBuzz:
              isSilly: true
          - Blue Buzz:
              isSilly: false
      
        foobaz:
          - Abracadabra:
              rating: 3000
              specialty: Such YAML much amaze
      

      另外,如果你觉得书呆子,你可以像这样使用小部件类型合并:

      buzz_widget: &buzz_widget
        type: buzz
      
      foobaz_widget: &foobaz_widget
        type: foobaz
      
      widgets:
        RedBuzz:
            isSilly: true
            <<: *buzz_widget
        BlueBuzz:
            isSilly: false
            <<: *buzz_widget
        Abracadabra:
            rating: 3000
            specialty: Such YAML much amaze
            <<: *foobaz_widget
      

      对我来说,最好使用嵌套键值结构(对于非原始元素)。被解析为地图后,您始终可以将其值作为集合访问。同时,您有唯一的约束和恒定的访问时间(按键)。如果您的密钥不应该是唯一的,那么您应该在返回序列之前尝试对其进行重组。

      【讨论】:

      • 我不确定您的第二个示例是否符合您的预期。例如,第三行和第四行描述了一个有两个键的映射:RedBuzz,其值为nullisSilly,其值为true。我认为您可能希望isSillyRedBuzz 缩进更多,这样第三行和第四行将描述一个带有一个键RedBuzz 的映射,其值是一个带有一个键isSilly 的映射。不过,也许我误解了你的意图。
      • 是的,你完全正确,我缺少意图!谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多