我正在尝试为我的应用设计配置文件格式并选择了YAML。但是,这(显然)意味着我需要能够定义,解析和验证正确的YAML语法!
在配置文件中,必须有一个名为widgets
的集合/序列。此序列需要包含一组类型化的小部件(可能的类型为fizz
,buzz
和foobaz
)。每个小部件还具有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语法?
答案 0 :(得分:3)
您可以查看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'}}]}
看起来像你似乎想要的那样。
答案 1 :(得分:1)
如果窗口小部件名称应该是唯一的,则可以将其用于键:
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
对我来说,最好使用嵌套键值结构(对于非原始元素)。解析为地图后,您始终可以将其作为集合访问。同时,您具有唯一约束和持续访问时间(按键)。如果您的密钥不应该是唯一的,那么您应该在返回序列之前尝试重构它。