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 ... #全文完