10分钟以内学会 YAML 格式

10分钟以内学会yaml

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 附加特性

#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

...   #全文完
相关文章
相关标签/搜索