提升您的YAML知识以编写更明晰的YAML文件
YAML是一种常用于数据序列化的文件格式。有少量运用YAML文件停止配置的项目,例如Docker-compose,pre-commit,TravisCI,AWS Cloudformation,ESLint,Kubernetes,Ansible等。了解YAML的功用可以协助您完成一切这些功用。
让我们先引见一下基础知识:YAML是JSON(源)的超集。每个有效的JSON文件也是一个有效的YAML文件。这意味着您拥有一切希冀的类型:整数,浮点数,字符串,布尔值,空值。以及序列和图。依据您的编程言语,您能够说“ array”或“ list”而不是序列,而说“ dictionary”而不是map。
通常看起来像这样:
mysql:
host: localhost
user: root
password: something
preprocessing_queue: # Line comments are available!
- name: preprocessing.scale_and_center
width: 32
height: 32
- preprocessing.dot_reduction
use_anonymous: true
等效符号
YAML有很多等效的编写办法:
list_by_dash:
- foo
- bar
list_by_square_bracets: [foo, bar]
map_by_indentation:
foo: bar
bar: baz
map_by_curly_braces: {foo: bar, bar: baz}
string_no_quotes: Monty Python
string_double_quotes: "Monty Python"
string_single_quotes: 'Monty Python'
bool_english: yes
bool_english_no: no
bool_python: True
bool_json: true
这里有些正告:
language: no # ISO 639-1 code for the Norwegian language
此否被解释为false。您需求输入“ no”或“ no”。
通常,我建议像布尔值JSON一样运用true和false,但是YAML支持11种写布尔值的办法。假设您想对字符串运用引号,我也将像JSON一样运用“。您依然需求记住” no“,但是至少该文件看起来对YAML初学者更熟习。
正如汤姆·里奇福德(Tom Ritchford)所指出的,还有更多相似的风险案例:
013映射到11,由于前导零触发八进制表示法
4:30映射到270。Max Werner Kaul-Gothe和Niklas Baumstark通知我,这被自动转换为分钟(或秒?),由于它被解释为继续时间:4 * 60 + 30 = 270。幽默的是,这种形式依然可以在1:1:1:1:1:1:1:1:4:30的状况下“任务”。
长字符串
disclaimer: >
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
In nec urna pellentesque, imperdiet urna vitae, hendrerit
odio. Donec porta aliquet laoreet. Sed viverra tempus fringilla.
这等效于以下JSON(为便于阅读,添加了换行符;请疏忽它们):
{"disclaimer": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. In nec urna pellentesque, imperdiet urna vitae, hendrerit odio. Donec porta aliquet laoreet. Sed viverra tempus fringilla."}
多行字符串
mail_signature: |
Martin Thoma
Tel. +49 123 4567
这等效于JSON:
{"mail_signature": "Martin Thoma\nTel. +49 123 4567"}
请留意如何疏忽前导空格。第一行(“ Martin Thoma”)确定疏忽的前导空白的数量。
锚
email: &emailAddress "info@example.de"
id: *emailAddress
这等效于以下JSON:
{"email": "info@example.de", "id": "info@example.de"}
&定义了一个变量emailAddress,其值为“ info@example.de。然后,*表示紧随其后的是变量名。
您可以对映射执行相反的操作:
foo: &default_settings
db:
host: localhost
name: main_db
port: 1337
email:
admin: admin@example.com
prod: *default_settings
dev: *default_settings
这使:
{ "dev": { "db": {"host":
"localhost",
(责任编辑:admin)