共计 2872 个字符,预计需要花费 8 分钟才能阅读完成。
10 分钟之内学会 yaml
YAML 是一种数据序列化语言,旨在直接可由人类编写和读取。
它是 JSON 的严格超集,重要的是语法上添加了换行符和缩进,类似 Python。但是,与 Python 不同的是,YAML 不允许使用 制表符 进行缩进。
--- # 文档开始
#YAML 中的注释看起来像这样的。#################
# 标量类型 #
#################
# 我们的根对象(对整个文档而言)将是一个映射,# 等同于其他语言的字典,散列或对象。key : value
another_key : 另一个值 _在 _这里
a_number_value : 100
scientific_notation : 1e+12
#数字 1 将被解释为数字,而不是布尔值。如果你想
#将它解释为布尔值,请使用 true
boolean : true
null_value : null
key with spaces : value
#注意字符串不需要引号。但也可以有。however: '围在引号内的字符串。'
'key with spaces' : "带引号的键,如果你想以把一个‘:’放键里也是可以的"
single quotes: '有'' 一个 ''转义模式'
double quotes: "有很多:\",\0,\t,\u263A,\x0d \x0a == \ r\n,等等 "
#UTF- 8/16/32 个字符需要编码
#上标 2
Superscript two: \u00B2
#多行字符串可以写成 '文字块'(使用 |),#或 '折叠块'(使用 '>')。literal_block : |
整个文本块将是 'literal_block' 键的值,并保留换行符。文字一直持续到反向缩进,并且
删除了前面的缩进。任何有“更多缩进”的
行都会保留其余的缩进 - 这些行将缩进 4 个空
folded_style : >
整个文本块将是 'folded_style' 的值,但这
一次,所有换行都将被替换为单个空格。与上面一样,空行将转换为换行符。“更多缩进”的行也保留了他们的换行符 -
此文本将显示为两行。#####################
# 集合类型 #
#####################
# 嵌套使用缩进。优选 2 个空格缩进(但不是必需的)。a_nested_map :
key : value
another_key : Another Value
another_nested_map :
hello : hello
#map 不一定有字符串键。0.25 : 浮点数键
#Key 也可能很复杂,比如多行对象
#我们用? 后跟一个空格,表示复杂键的开始。? |
这是一个
有多行的键
: 这是它的值
#YAML 还允许使用复杂的键语法在序列之间进行映射
#某些语言解析器可能会抱怨
#一个例子
? - 曼联
- 皇家马德里
: [2001-01-01 , 2002-02-02]
# Sequence(相当于列表 list 或数组 array)看起来像这样
#(注意 '-' 算作缩进):
a_sequence :
- Item 1
- Item 2
- 0.5 #sequence 可以包含不同的类型。- 第 4 项
- 键: 值
another_key : another_value
-
- 这是一个序列
- 在另一个序列中
- - - 嵌套序列指示符
- 可以折叠
#由于 YAML 是 JSON 的超集,则也可以编写 JSON 式 map 和
#序列:
json_map : {"钥匙" : "值"}
json_seq : [3 , 2, 1 , "起飞"]
and quotes are optional: {键: [ 3 , 2 , 1 , 起飞]} #且引号是可选的
########################
# YAML 附加特性 #
########################
#YAML 还有一个名为“anchors”的便捷功能,可让您轻松复制文档中的
# 内容。这两个按键也会有同样的值:
anchored_content : &anchor_name 此字符串将显示为两个键的值。other_anchor : *anchor_name
# Anchors 可用于复制 / 继承属性
base : &base
name : 大家都有相同的名字
# regexp << 被称为语言无关的合并键类型。它用于
#表示应将一个或多个指定映射的所有键插入到当前映射中。foo : &foo
<< : *base
age: 10
bar : &bar
<< : *base
age: 20
#foo 和 bar 也有 name:‘大家都有相同的名字’#YAML 还有标记,您可以使用它来显式声明类型。explicit_string : !!str 0.5
#一些解析器实现了特定于语言的标签,就像 Python 的
# 复数 complex 数字类型一样。python_complex_number : !!python/complex 1 + 2j
#我们还可以使用带语言特定标签的 yaml 复合键
? !!python/tuple [5, 7]
: Fifty Seven
#在 Python 将是 {(5, 7): 'Fifty Seven'}
#####################
# 更多 YAML 类型 #
#####################
#字符串和数字不是 YAML 可以理解的唯一标量。#ISO 格式的日期和日期时间也被解析。datetime : 2001-12-15T02:59:43.1Z
datetime_with_spaces : 2001-12-14 21:59:43.10 -5
date : 2002-12-14
#!!binary 标签表示字符串实际上是二进制的 base64 编码的大字段 blob
# 浏览器地址栏粘上以下内容去看看吧:# data:image/git;base64,R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5 OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+ +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
gif_file : !!binary |
R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
+f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
#YAML 也有集合 set 类型,它看起来像这样:
set:
? item1
? item2
? item3
or: {item1 , item2 , item3}
#集 set 只是具有空值的映射 map; 以上等同于:
set2 :
item1 : null
item2 : null
item3 : null
... #全文完
正文完