YAML 的定義是:“YAML Ain ’ t a Markup Language”,或者“Yet Another Markup Language”。
特點
- YAML 的數(shù)據(jù)組織主要依靠的是空白,縮進,分行等結構,可讀性好。
- YAML 實現(xiàn)簡單,解析成本很低,和腳本語言的交互性好。
- YAML 很容易就可以插入另一個 YAML 文件,甚至其他類型的文件,包括 XML, SDL, JSON 等。
- YAML 使用實現(xiàn)語言的數(shù)據(jù)類型。
- YAML 可以基于流來處理;
- YAML 表達能力強,擴展性好。
說明
基礎
- 使用空白字符(不能使用Tab)分層,同層元素左側對齊;
- 用“-”來表示一些序列的項(Sequence);
- 用“:”來表示一對項目(Map)里的欄目(Key)和其相應的值(Value);
- 單行注解由“#”字號開始,可以出現(xiàn)在行中任何位置;
- 字符串一般不使用引號,但必要的時候可以用引號框住;
- YAML也有用來描述好幾行相同結構的數(shù)據(jù)的縮寫語法,數(shù)組用“[]”包括起來,hash用“{}”來包括。
其它
- YAML使用可打印的Unicode字符,可使用UTF-8或UTF-16
- 使用雙引號表示字串時,可用倒斜線(\)進行特殊字符轉義
- 區(qū)塊的字串用縮排和修飾詞(非必要)來和其他資料分隔,有新行保留(使用符號<kbd>|</kbd>)或新行折疊(使用符號<kbd>></kbd>)兩種方式
- 在單一檔案中,可用連續(xù)三個連字號(---)區(qū)分多個檔案
- 可選擇性的連續(xù)三個點號(...)用來表示檔案結尾(在流式傳輸時非常有用,不需要關閉流即可知道到達結尾處)
- 重復的內(nèi)容可使從參考標記星號 (*)復制到錨點標記(&)
- 指定格式可以使用兩個驚嘆號 ( !! ),后面接上名稱
- 允許在文件中加入選擇性的空行,以增加可讀性
- 在縮排中空白字符的數(shù)目并不是非常重要,只要相同階層的元素左側對齊就可以了
實例
簡單實例
John.yaml
name: John Smith
age: 37
spouse:
name: Jane Smith
age: 25
children:
- name: Jimmy Smith
age: 15
- name: Jenny Smith
age: 12
John今年37歲,有一個幸福的四口之家。兩個孩子Jimmy 和Jenny活潑可愛。妻子Jane年輕美貌。
也可縮寫為:
name: John Smith
age: 37
spouse: {name: Jane Smith, age: 25}
children: [{name: Jimmy Smith, age: 15}, {name: Jenny Smith, age: 12}]
用 YAML 表達的一個購物發(fā)票
--- !clarkevans.com/^invoice
invoice: 34843
date : 2001-01-23
bill-to: &id001
given : Chris
family : Dumars
address:
lines: |
458 Walkman Dr.
Suite #292
city : Royal Oak
state : MI
postal : 48046
ship-to: *id001
product:
- sku : BL394D
quantity : 4
description : Basketball
price : 450.00
- sku : BL4438H
quantity : 1
description : Super Hoop
price : 2392.00
tax : 251.42
total: 4443.52
comments: >
Late afternoon is best.
Backup contact is Nancy
Billsmer @ 338-4338.
比較
JSON
JSON的語法是YAML1.2版的子集,同時非常接近YAML1.0與1.1版的子集,因此大部分的JSON文件都可以被YAML的剖析器剖析。這是因為JSON的語法結構和YAML的內(nèi)置格式相同。雖然大范圍的分層也可以使用類似JSON的內(nèi)置格式,不過YAML標準并不建議這樣使用,除非這樣編寫能讓文件可讀性增加。YAML的許多擴展在JSON是找不到的,如:進階資料形態(tài)、關系錨點、字串不需要雙引號、映射資料形態(tài)會儲存鍵值的順序。