參考了YAML官網
YAML是專注於寫配置檔案的語言,這個名字的含義是YAML Ain"t Markup Language(YAML不是一種標記語言),但是實際上YAML還是一種標記語言,只不過是更加聚焦於資料的標記語言。
YAML的基本語法規則
大小寫敏感
使用縮排表示層級關係(這個和Python很像了,估計是從Python借鑑的)
縮排時絕對不允許使用Tab鍵,只允許使用空格鍵
縮排的空格數不重要,只要元素左側能對齊就可以。
字串可以不用引號標註
YAML完全相容Json的語法,可以把Json看做是YAML的一個子集
我們來看一下YAML支援的資料型別
物件:就是鍵值對的集合,和Json中物件的概念一樣
列表:又稱為序列,是一組有序排列的值,和Json中列表的概念一樣
scalars(純量):不可拆分的資料型別,和Json中的基本資料型別一樣
來看一下YAML具體的語法。
在一個yml檔案中,使用---來表示一段文件(或者一組配置)的開始,使用...來表示一段文件的結束。如果yml中只有一組配置,則可以省略掉---.
使用#來表示註解
使用-來表示單個的列表項,比如
- A
- B
- C
對應Json中的[ "A", "B", "C" ]
對應於Json的[ [ "A", "B", "C" ], [ "D", "E", "F" ] ]
尤其是要注意,由於YAML相容Json的語法,所以我們直接在yml檔案中寫[ [ A, B, C ], [ D, E, F ] ]也是可以的。
使用:來表示鍵值對
name: chico
age: 18
對應Json的{ name: "chico", age: 18 }
-
name: dong
age: 19
對應Json中的[ { name: "chico", age: 18 }, { name: "dong", age: 19 } ]
看一個將列表和物件結合起來的
american:
- Boston Red Sox
- Detroit Tigers
- New York Yankees
national:
- New York Mets
- Chicago Cubs
- Atlanta Braves
對應Json { american: [ "Boston Red Sox", "Detroit Tigers", "New York Yankees" ], national: [ "New York Mets", "Chicago Cubs", "Atlanta Braves-" ] }
與Json不同的是,YAML中鍵值對的鍵不要求一定是字串,可以是一些複雜的型別,但是Json中要求鍵值對的鍵必須是字串。
當YAML中鍵值對的鍵是複雜型別的時候,必須要用?說明,比如
?[a,b,c]:color
#或者
?-a
-b
-c
:color
YAML中null用~表示
比如money:~
YAML中段落用|和縮排表示,YAML會保留該段落中的回車換行符
比如
description: |
#注意:和 |之間的空格
這是一篇非常非常長的介紹YAML的文章
文章是非常有內容的
YAML中用>和縮排表示把段落連城一句話,YAML會把該段落中的回車換行替換成空格,最終連成一句話
description: >
這是一篇介紹YAML的文章,非常長
但是把他們連成一句話了
a: |+
保留了換行符
b: |-
YAML中也會把"雙引號和"單引號中的字串連成一行,引號中可以包含跳脫字元
description:
"雖然表面上看這是兩行,
但其實是一行"
#和下面這個是一樣的
雖然表面上看這是兩行,
但其實是一行
YAML中使用!和!!來做強制型別轉換
#強行把123轉換成str
e:!!str 123
#強行把boolean型轉換為str
b:!!str true
YAML中可以透過&來錨點,透過*來引用
s1:
favourite: &SS reading
s2:
favourite: *SS
<<表示追加
default: &&default
host: http
path:index
server1:
name:server1
<<:*default
server2:
name:server2
等價於
YAML還支援set和ordered map
在YAML中set就是一組值全部為null的鍵值對,比如
--- !!set #強行轉換為set
? hahaha
? chico dong
? haha lala
對應的json是{ hahaha: null, "chico dong": null, "haha lala": null }
在YAML中ordered map就是一組有序的鍵值對(可以認為是放在list中的鍵值對),
--- !!omap #強行轉換為有序鍵值對
- hahaha: haha
- chico dong: dong
- lala: "haha lala"
對應的Json為[ { hahaha: "haha" }, { "chico dong": "dong" }, { lala: "haha lala" } ]
感覺這個和正常的yaml巢狀寫法沒什麼區別
參考了YAML官網
YAML是專注於寫配置檔案的語言,這個名字的含義是YAML Ain"t Markup Language(YAML不是一種標記語言),但是實際上YAML還是一種標記語言,只不過是更加聚焦於資料的標記語言。
YAML的基本語法規則
大小寫敏感
使用縮排表示層級關係(這個和Python很像了,估計是從Python借鑑的)
縮排時絕對不允許使用Tab鍵,只允許使用空格鍵
縮排的空格數不重要,只要元素左側能對齊就可以。
字串可以不用引號標註
YAML完全相容Json的語法,可以把Json看做是YAML的一個子集
我們來看一下YAML支援的資料型別
物件:就是鍵值對的集合,和Json中物件的概念一樣
列表:又稱為序列,是一組有序排列的值,和Json中列表的概念一樣
scalars(純量):不可拆分的資料型別,和Json中的基本資料型別一樣
來看一下YAML具體的語法。
在一個yml檔案中,使用---來表示一段文件(或者一組配置)的開始,使用...來表示一段文件的結束。如果yml中只有一組配置,則可以省略掉---.
使用#來表示註解
使用-來表示單個的列表項,比如
- A
- B
- C
對應Json中的[ "A", "B", "C" ]
對應於Json的[ [ "A", "B", "C" ], [ "D", "E", "F" ] ]
尤其是要注意,由於YAML相容Json的語法,所以我們直接在yml檔案中寫[ [ A, B, C ], [ D, E, F ] ]也是可以的。
使用:來表示鍵值對
name: chico
age: 18
對應Json的{ name: "chico", age: 18 }
-
name: chico
age: 18
-
name: dong
age: 19
對應Json中的[ { name: "chico", age: 18 }, { name: "dong", age: 19 } ]
看一個將列表和物件結合起來的
american:
- Boston Red Sox
- Detroit Tigers
- New York Yankees
national:
- New York Mets
- Chicago Cubs
- Atlanta Braves
對應Json { american: [ "Boston Red Sox", "Detroit Tigers", "New York Yankees" ], national: [ "New York Mets", "Chicago Cubs", "Atlanta Braves-" ] }
與Json不同的是,YAML中鍵值對的鍵不要求一定是字串,可以是一些複雜的型別,但是Json中要求鍵值對的鍵必須是字串。
當YAML中鍵值對的鍵是複雜型別的時候,必須要用?說明,比如
?[a,b,c]:color
#或者
?-a
-b
-c
:color
YAML中null用~表示
比如money:~
YAML中段落用|和縮排表示,YAML會保留該段落中的回車換行符
比如
description: |
#注意:和 |之間的空格
這是一篇非常非常長的介紹YAML的文章
文章是非常有內容的
YAML中用>和縮排表示把段落連城一句話,YAML會把該段落中的回車換行替換成空格,最終連成一句話
description: >
這是一篇介紹YAML的文章,非常長
但是把他們連成一句話了
a: |+
保留了換行符
b: |-
YAML中也會把"雙引號和"單引號中的字串連成一行,引號中可以包含跳脫字元
description:
"雖然表面上看這是兩行,
但其實是一行"
#和下面這個是一樣的
description:
雖然表面上看這是兩行,
但其實是一行
YAML中使用!和!!來做強制型別轉換
比如
#強行把123轉換成str
e:!!str 123
#強行把boolean型轉換為str
b:!!str true
YAML中可以透過&來錨點,透過*來引用
s1:
name: chico
favourite: &SS reading
s2:
name: dong
favourite: *SS
<<表示追加
比如
default: &&default
host: http
path:index
server1:
name:server1
<<:*default
server2:
name:server2
<<:*default
等價於
default: &&default
host: http
path:index
server1:
name:server1
host: http
path:index
server2:
name:server2
host: http
path:index
YAML還支援set和ordered map
在YAML中set就是一組值全部為null的鍵值對,比如
--- !!set #強行轉換為set
? hahaha
? chico dong
? haha lala
對應的json是{ hahaha: null, "chico dong": null, "haha lala": null }
在YAML中ordered map就是一組有序的鍵值對(可以認為是放在list中的鍵值對),
比如
--- !!omap #強行轉換為有序鍵值對
- hahaha: haha
- chico dong: dong
- lala: "haha lala"
對應的Json為[ { hahaha: "haha" }, { "chico dong": "dong" }, { lala: "haha lala" } ]
感覺這個和正常的yaml巢狀寫法沒什麼區別