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

...   #全文完
相關文章
相關標籤/搜索