Docker 教程
YAML 是 "YAML Ain't a Markup Language"(YAML 不是一種標(biāo)記語(yǔ)言)的遞歸縮寫。在開發(fā)的這種語(yǔ)言時(shí),YAML 的意思其實(shí)是:"Yet Another Markup Language"(仍是一種標(biāo)記語(yǔ)言)。
YAML 的語(yǔ)法和其他高級(jí)語(yǔ)言類似,并且可以簡(jiǎn)單表達(dá)清單、散列表,標(biāo)量等數(shù)據(jù)形態(tài)。它使用空白符號(hào)縮進(jìn)和大量依賴外觀的特色,特別適合用來(lái)表達(dá)或編輯數(shù)據(jù)結(jié)構(gòu)、各種配置文件、傾印調(diào)試內(nèi)容、文件大綱(例如:許多電子郵件標(biāo)題格式和YAML非常接近)。
YAML 的配置文件后綴為 .yml,如:json.yml 。
YAML 支持以下幾種數(shù)據(jù)類型:
對(duì)象鍵值對(duì)使用冒號(hào)結(jié)構(gòu)表示 key: value,冒號(hào)后面要加一個(gè)空格。
也可以使用 key:{key1: value1, key2: value2, ...}。
還可以使用縮進(jìn)表示層級(jí)關(guān)系;
key: child-key: value child-key2: value2
較為復(fù)雜的對(duì)象格式,可以使用問(wèn)號(hào)加一個(gè)空格代表一個(gè)復(fù)雜的 key,配合一個(gè)冒號(hào)加一個(gè)空格代表一個(gè) value:
? - complexkey1 - complexkey2 : - complexvalue1 - complexvalue2
意思即對(duì)象的屬性是一個(gè)數(shù)組 [complexkey1,complexkey2],對(duì)應(yīng)的值也是一個(gè)數(shù)組 [complexvalue1,complexvalue2]
以 - 開頭的行表示構(gòu)成一個(gè)數(shù)組:
- A - B - C
YAML 支持多維數(shù)組,可以使用行內(nèi)表示:
key: [value1, value2, ...]
數(shù)據(jù)結(jié)構(gòu)的子成員是一個(gè)數(shù)組,則可以在該項(xiàng)下面縮進(jìn)一個(gè)空格。
- - A - B - C
一個(gè)相對(duì)復(fù)雜的例子:
companies: - id: 1 name: company1 price: 200W - id: 2 name: company2 price: 500W
意思是 companies 屬性是一個(gè)數(shù)組,每一個(gè)數(shù)組元素又是由 id、name、price 三個(gè)屬性構(gòu)成。
數(shù)組也可以使用流式(flow)的方式表示:
companies: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]
數(shù)組和對(duì)象可以構(gòu)成復(fù)合結(jié)構(gòu),例:
languages: - Ruby - Perl - Python websites: YAML: yaml.org Ruby: ruby-lang.org Python: python.org Perl: use.perl.org
轉(zhuǎn)換為 json 為:
{ languages: [ 'Ruby', 'Perl', 'Python'], websites: { YAML: 'yaml.org', Ruby: 'ruby-lang.org', Python: 'python.org', Perl: 'use.perl.org' } }
純量是最基本的,不可再分的值,包括:
使用一個(gè)例子來(lái)快速了解純量的基本使用:
boolean: - TRUE #true,True都可以 - FALSE #false,F(xiàn)alse都可以 float: - 3.14 - 6.8523015e+5 #可以使用科學(xué)計(jì)數(shù)法 int: - 123 - 0b1010_0111_0100_1010_1110 #二進(jìn)制表示 null: nodeName: 'node' parent: ~ #使用~表示null string: - 哈哈 - 'Hello world' #可以使用雙引號(hào)或者單引號(hào)包裹特殊字符 - newline newline2 #字符串可以拆成多行,每一行會(huì)被轉(zhuǎn)化成一個(gè)空格 date: - 2018-02-17 #日期必須使用ISO 8601格式,即yyyy-MM-dd datetime: - 2018-02-17T15:02:31+08:00 #時(shí)間使用ISO 8601格式,時(shí)間和日期之間使用T連接,最后使用+代表時(shí)區(qū)
& 錨點(diǎn)和 * 別名,可以用來(lái)引用:
defaults: &defaults adapter: postgres host: localhost development: database: myapp_development <<: *defaults test: database: myapp_test <<: *defaults
相當(dāng)于:
defaults: adapter: postgres host: localhost development: database: myapp_development adapter: postgres host: localhost test: database: myapp_test adapter: postgres host: localhost
& 用來(lái)建立錨點(diǎn)(defaults),<< 表示合并到當(dāng)前數(shù)據(jù),* 用來(lái)引用錨點(diǎn)。
下面是另一個(gè)例子:
- &showell Steve - Clark - Brian - Oren - *showell
轉(zhuǎn)為 JavaScript 代碼如下:
[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]
參考地址:
- https://www.ruanyifeng.com/blog/2016/07/yaml.html
- https://www.jianshu.com/p/97222440cd08
- https://daihainidewo.github.io/blog/yaml%E6%95%99%E7%A8%8B/