1.是什麼?
官網
官方解釋
YAML: YAML Ain't Markup Language
What It Is: YAML is a human friendly data serialization
standard for all programming languages.
YAML(/ˈjæməl/,尾音類似camel駱駝)是一個可讀性高,用來表達數據序列化的格式
2.怎麼使用?
2.1基本使用規則
- 大小寫敏感
- 使用縮進表示層級關係
- 縮進不允許使用tab,只允許空格
- 縮進的空格數不重要,只要相同層級的元素左對齊即可
- '#'表示註釋
3.1數據類型
- 對象:鍵值對的集合,又稱爲映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 數組:一組按次序排列的值,又稱爲序列(sequence) / 列表(list)
- 純量(scalars):單個的、不可再分的值
3.2類型介紹
3.2.1 數組
以 - 開頭的行表示構成一個數組:
簡單數組
- A
- B
- C
結果:
[ 'A', 'B', 'C' ]
複雜數組
數組子成員是一個數組
A:
-
- a
- b
- c
結果:
{ A: [ [ 'a', 'b', 'c' ] ] }
3.2.2 對象
簡單對象
對象鍵值對使用冒號結構表示 key: value,冒號後面要加一個空格。
也可以使用 key:{key1: value1, key2: value2, ...}。
還可以使用縮進表示層級關係;
obj1:
A : aaa
B: bb
C: cc
obj2: {A: aa,B: bb,C: cc}
結果:
obj1: { A: 'aaa', B: 'bb', C: 'cc' }
obj2: { A: 'aa', B: 'bb', C: 'cc' }
複雜對象
使用問號加一個空格代表一個複雜的 key,配合一個冒號加一個空格代表一個 value
?
- key3
- key4
:
- val3
- val4
結果:
'key3,key4': [ 'val3', 'val4' ]
3.2.3 數組對象混合
A:
-
a: aaa
b: bbb
c: ccc
結果:
{ A: [ { a: 'aaa', b: 'bbb', c: 'ccc' } ] }
3.2.3 純量
- 字符串
- 布爾值
- 整數
- 浮點數
- Null
- 時間
- 日期
舉例:
boolean:
- TRUE #true,True都可以
- FALSE #false,False都可以
float:
- 3.14
- 6.8523015e+5 #可以使用科學計數法
int:
- 123
- 0b1010_0111_0100_1010_1110 #二進制表示
null:
nodeName: 'node'
parent: ~ #使用~表示null
string:
- 哈哈
- 'Hello world' #可以使用雙引號或者單引號包裹特殊字符
- newline
newline2 #字符串可以拆成多行,每一行會被轉化成一個空格
date:
- 2018-02-17 #日期必須使用ISO 8601格式,即yyyy-MM-dd
datetime:
- 2018-02-17T15:02:31+08:00 #時間使用ISO 8601格式,時間和日期之間使用T連接,最後使用+代表時區
結果:
{ boolean: [ true, false ],
float: [ 3.14, 685230.15 ],
int: [ 123, 685230 ],
null: { nodeName: 'node', parent: null },
string: [ '哈哈', 'Hello world', 'newline newline2' ],
date: [ Sat Feb 17 2018 08:00:00 GMT+0800 (中國標準時間) ],
datetime: [ Sat Feb 17 2018 15:02:31 GMT+0800 (中國標準時間) ] }
3.2.4 引用
一個地方定義,在另一個地方使用
& 錨點和 * 別名
& 用來建立錨點(defaults),<< 表示合併到當前數據,* 用來引用錨點。
#對象使用引用
a: &bb
aa: aaa
bb: bbb
dev:
log: info
<<: *bb
test:
log: debug
<<: *bb
##數組使用引用
- cc
- &ss dd
- *ss ##引用前一個
- ee
結果:
{ a: { aa: 'aaa', bb: 'bbb' },
dev: { log: 'info', aa: 'aaa', bb: 'bbb' },
test: { log: 'debug', aa: 'aaa', bb: 'bbb' } }
[ 'cc', 'dd', 'dd', 'ee' ]
以上只是簡單的使用,更多使用方法和規則參考官網說明,目前是1.2版本。
C++關於YAML與Json互相轉換可以參考這裏
本文參考網址:
https://yaml.org/spec/1.2/spec.html#id2760395
https://www.sylar.top/sblog/detail/36
https://www.runoob.com/w3cnote/yaml-intro.html