YAML是一种数据序列化语言,旨在直接可由人类编写和读取。python
它是JSON的严格超集,重要的是语法上添加了换行符和缩进,相似 Python。可是,与Python不一样的是,YAML不容许使用制表符进行缩进。git
--- # 文档开始 #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还有一个名为“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能够理解的惟一标量。 #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 ... #全文完