目錄
9.2 多行字符串可以使用|保留換行符,也可以使用>摺疊換行。
9.3 +表示保留文字塊末尾的換行,-表示刪除字符串末尾的換行。
1 YAML 簡單介紹
YAML,即YAML Ain’t Markup Language的縮寫,YAML 是一種簡潔的非標記語言。YAML以數據爲中心,使用空白,縮進,分行組織數據,從而使得表示更加簡潔易讀。
yaml文件其實也是一種配置文件類型,相比較ini,conf配置文件來說,更加的簡潔,操作也更加簡單,同時可以存放不同類型的數據,不會改變原有數據類型,所有的數據類型在讀取時都會原樣輸出,yaml文件依賴python的第三方庫PyYaml模塊
YAML 是 "YAML Ain't a Markup Language"(YAML 不是一種標記語言)的遞歸縮寫。在開發的這種語言時,YAML 的意思其實是:"Yet Another Markup Language"(仍是一種標記語言)。
YAML 的語法和其他高級語言類似,並且可以簡單表達清單、散列表,標量等數據形態。它使用空白符號縮進和大量依賴外觀的特色,特別適合用來表達或編輯數據結構、各種配置文件、傾印調試內容、文件大綱(例如:許多電子郵件標題格式和YAML非常接近)。YAML 的配置文件後綴爲 .yml,如:runoob.yml 。yaml在線轉換JavaScript
2 YAML基本語法
- 大小寫敏感
- 使用縮進表示層級關係
- 禁止使用tab縮進,只能使用空格鍵
- 縮進長度沒有限制,只要元素對齊就表示這些元素屬於一個層級。
- 使用#表示註釋
- 字符串可以不用引號標註
3 YAML 組織結構
YAML 文件可以由一或多個文檔組成(也即相對獨立的組織結構組成),文檔間使用“---”(三個橫線)在每文檔開始作爲分隔符。同時,文檔也可以使用“...”(三個點號)作爲結束符(可選)。如果只是單個文檔,分隔符“---”可省略。
4 YAML數據類型
YAML 支持的數據結構有三種:
- 對象:鍵值對的集合,又稱爲映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 數組:一組按次序排列的值,又稱爲序列(sequence) / 列表(list)
- 純量(scalars):單個的、不可再分的值
5 YAML 對象
5.1 使用 “:”(冒號) + 空格表示單個鍵值對
對象鍵值對使用冒號結構表示 key: value,冒號後面要加一個空格。
也可以使用 key: {key1: value1, key2: value2, ...}。
還可以使用縮進表示層級關係;
key:
child-key: value
child-key2: value2
5.2 使用"{}"表示一個鍵值表
items: {no: 1234, descript: cpu, price: ¥800.00}
5.3 "? " 問號+空格表示複雜的鍵
"? " 問號+空格表示複雜的鍵。當鍵是一個列表或鍵值表時,就需要使用本符號來標記。
# 使用一個列表作爲鍵
? [blue, reg, green]: Color
# 等價於
? - blue
- reg
- gree
: Color
6 YAML數組
使用一個短橫線加一個空格代表一個數組項:
hobby:
- Java
- LOL
當然也可以有這樣的寫法:
-
- Java
- LOL
可以簡單理解爲:
[ [ 'Java', 'LOL' ] ]
數組的理解:
PaymentDetail:
- billPaymentNo: "201904171022507929513877465876"
- paymentAmount: 1000.00
- paymentMethod1: "ODD"
- paymentSuccessDate: 2019-04-17 13:00:00
轉爲 JavaScript 如下:
{ PaymentDetail: null,
' - billPaymentNo': '201904171022507929513877465876',
' - paymentAmount': 1000,
' - paymentMethod1': 'ODD',
' - paymentSuccessDate': Wed Apr 17 2019 21:00:00 GMT+0800 (中國標準時間) }
理解爲:PaymentDetail值爲一個列表,列表中有四個元素,其中每個元素都是一個字典,每個字典中只有一個鍵值對
PaymentDetail1:
- billPaymentNo: "201904171022507929513877465876"
paymentAmount: 1000.00
paymentMethod1: "ODD"
paymentSuccessDate: 2019-04-17 13:00:00
轉爲 JavaScript 如下:
{ PaymentDetail1: null,
' - billPaymentNo': '201904171022507929513877465876',
' paymentAmount': 1000,
' paymentMethod1': 'ODD',
' paymentSuccessDate': Wed Apr 17 2019 21:00:00 GMT+0800 (中國標準時間) }
理解爲:PaymentDetail1值爲一個列表,列表中只有一個元素,該元素爲一個字典,字典由多個鍵值對構成
7 YAML複合結構
對象和數組可以結合使用,形成複合結構。
languages:
- Ruby
- Perl
- Python
websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
Perl: use.perl.org
轉爲 JavaScript 如下:
{ languages: [ 'Ruby', 'Perl', 'Python' ],
websites: null,
' YAML': 'yaml.org',
' Ruby': 'ruby-lang.org',
' Python': 'python.org',
' Perl': 'use.perl.org' }
8 YAML純量
字符串
布爾值
整數
浮點數
Null
時間
日期
9 YAML特殊用法
9.1 一般用!!(雙歎號)做類型轉換
string:
- !!str 54321
- !!str true
轉爲 JavaScript 如下:
{ string: [ '54321', 'true' ] }
9.2 多行字符串可以使用|保留換行符,也可以使用>摺疊換行。
this: |
Foo
Bar
that: |
Foo
Bar
轉爲 JavaScript 代碼如下:
{ this: 'Foo\nBar\n', that: 'Foo\nBar\n' }
9.3 +表示保留文字塊末尾的換行,-表示刪除字符串末尾的換行。
s1: |
Foo
s2: |+
Foo
s3: |-
Foo
轉爲 JavaScript 代碼如下:
{ s1: 'Foo\n', s2: 'Foo \n', s3: 'Foo' }
9.4 布爾值用true和false表示。
NULL用~表示
10 錨點&和別名*,可以用來引用,定義數據的複用
第一步:使用 “&” 定義數據錨點(即要複製的數據)
第二步:使用 “*” 引用上述錨點數據(即數據的複製目的地)
defaults: &defaults
adapter: postgres
host: localhost
development:
database: myapp_development
<<: *defaults
test:
database: myapp_test
<<: *defaults
等同於下面的代碼:
defaults:
adapter: postgres
host: localhost
development:
database: myapp_development
adapter: postgres
host: localhost
test:
database: myapp_test
adapter: postgres
host: localhost
&用來建立錨點(defaults),<<表示合併到當前數據,*用來引用錨點。