YAML 是一種簡潔的非標記語言(YAML Ain’t Markup Language),YAML以數據爲中心,使用空白,縮進,分行組織數據,從而使得表示更加簡潔易讀, 經常使用於做爲配置文件, 比json更加簡潔。json
一、JSON 能夠看做是 YAML 的子集,也就是說 JSON 可以作的事情,YAML 也可以作數組
二、YAML 能表示得比 JSON 更加簡單和閱讀,例如「字符串不須要引號」。因此 YAML 容易能夠寫成 JSON 的格式,但並不建議這種作數據結構
三、YAML 可以描述比 JSON 更加複雜的結構,例如「關係錨點」能夠表示數據引用(如重複數據的引用)spa
k: v:字面直接來寫設計
字符串默認不須要加單引號或者雙引號,若是加雙引號,它不會轉義字符串裏面的特殊字符,而加單引號,則會轉義字符串裏面的特殊字符,意思就是將特殊字符直接變爲字符串輸出。code
一、對象、map集合(鍵值對):冒號分隔鍵值對(Key: Value), Key須要頂格寫,前面不能有空格,冒號後面須要有一個空格而後再跟值, 相同的縮進屬於同一個map ,好比:對象
# 對象:縮進方式 obj: field1: x field2: S # 對象:行內方式 obj: {field1: x,field2: s}
二、數組(List、set):一組按次序排列的值,又稱爲序列(sequence) / 列表(list)。好比:ip
# 數組:連字符方式,若是元素也是數組就再使用一層縮進 array: - ele1 - ele2 # 數組:行內方式 array: [elel,ele2]
複雜屬性之間能夠嵌套文檔
--- # 使用冒號:表示鍵值對, 冒號後面須要有一個空格, key須要頂格寫,前面不能有空格 同一縮進的全部鍵值對屬於一個map str: 這是一行字符串 # 字符串默認不使用引號表示 str2: '內容: 字符串' # 若是字符串之中包含空格或特殊字符,須要放在引號之中 str3: '內容\n字符串' # 單引號和雙引號均可以使用,雙引號不會對特殊字符轉義 str4: "內容\n字符串" # 雙引號對特殊字符不轉義 str5: 'labor''s day' # 單引號之中若是還有單引號,須要使用單引號轉義 # 字符串能夠寫成多行,從第二行開始,必須有一個單空格縮進。換行符會被轉爲空格 str6: 這是一段 多行 字符串 str7: | # "|"表示每行末尾都跟一個換行符 Foo Bar str8: > # 「>」 最後一行跟一個換行符 Foo Bar str9: | Foo str10: |+ # +表示保留文字塊末尾的換行 Foo str11: |- # -表示刪除字符串末尾的換行 Foo str12: | # 字符串之中能夠插入 HTML 標記 <p style="color: red"> 段落 </p> int: 10 float: 9.99 bool: true # true、false # 時間採用 ISO8601 格式 1點被轉成9點 date: 2015-08-23 # 日期 datetime: 2015-08-23T02:02:00.1z # 日期時間 iso8601: 2015-08-23t21:59:43.10-05:00 # iso8601 日期格式 spaced: 2015-08-23 21:59:43.10 -5 # # 對象:縮進方式 obj: field1: x field2: field21: xx field22: xxx # 對象:行內方式(和json格式差很少) obj2: { field1: 'x', field2: { field21: 'xx', field22: 'xxx' } } # 數組:連字符方式,若是元素也是數組就再使用一層縮進 array: - ele1 - ele2 - - ele31 - ele32 # 行內方式 array2: [ 'ele1', 'ele2', [ 'ele31', 'ele32' ] ] # 數組中的原始是對象 array3: - field1: x field2: xx field3: xxx - field1: x field2: xx field3: xxx set: ? ele ? ele2 # 嵌套方式 nested: field1: x arr: - {field1: x, field2: x, field3: [1, 2, 3]} - {field1: x, field2: x, field3: [2, 3, 4]} arr2: - - a - b - - c - c # 類型轉換: 使用兩個感嘆號跟要轉換的基本數據類型,單引號:用於轉換自定義對象 #下面是內置類型 #!!int # 整數類型 #!!float # 浮點類型 #!!bool # 布爾類型 #!!str # 字符串類型 #!!binary # 也是字符串類型 #!!timestamp # 日期時間類型 #!!null # 空值 #!!set # 集合 #!!omap, !!pairs # 鍵值列表或對象列表 #!!seq # 序列,也是列表 #!!map # 鍵值表 test: !!str 123 # 當鍵是數組或者對象時須要使用問號來標記 ?[blue, reg, green]: xxx ?{a:xx, b:xx}: xx # 錨點和引用 ref: - &index1 a - b - *index1 ...
若是使用yml文件格式做爲配置文件的話,那麼還有一個好處,yml文件支持多文檔塊的方式,使用「---」便可,可將編輯的內容分爲多個文檔,「...」可做爲文件的結尾。字符串