SpringBoot 2.X課程學習 | 第五篇:yml語法讓配置檔案更加簡潔易讀
阿新 • • 發佈:2019-06-12
簡介
YAML 是一種簡潔的非標記語言(YAML Ain’t Markup Language),YAML以資料為中心,使用空白,縮排,分行組織資料,從而使得表示更加簡潔易讀, 常用於作為配置檔案, 比json更加簡潔。
YAML 的設計目標
- 人類容易閱讀
- 可用於不同程式間的資料交換
- 適合描述程式所使用的資料結構,特別是指令碼語言
- 豐富的表達能力與可擴充套件性
- 易於使用
YAML與XML、JSON比較
- YAML 與 XML:具有 XML 同樣的優點,但比 XML 更加簡單、敏捷等
- YAML 與 JSON:
1、JSON 可以看作是 YAML 的子集,也就是說 JSON 能夠做的事情,YAML 也能夠做
2、YAML 能表示得比 JSON 更加簡單和閱讀,例如“字串不需要引號”。所以 YAML 容易可以寫成 JSON 的格式,但並不建議這種做
3、YAML 能夠描述比 JSON 更加複雜的結構,例如“關係錨點”可以表示資料引用(如重複資料的引用)
YAML的適用範圍
- 由於實現簡單,解析成本很低,YAML特別適合在指令碼語言中使用。列一下現有的語言實現:Ruby,Java,Perl,Python,PHP,OCaml,JavaScript。除了Java,其他都是指令碼語言.
- YAML比較適合做序列化。因為它是宿主語言資料型別直轉的,由於相容性問題,不同語言間的資料流轉建議現在不要用YAML.
- YAML做配置檔案也不錯。比如Ruby on Rails的配置就選用的YAML。對ROR而言,這很自然,也很省事.
語法
- 大小寫敏感
- 使用縮排表示層級關係
- 禁止使用tab縮排,只能使用空格鍵 , 建議使用兩個空格
- 縮排的空格數目不重要,只要相同層級的元素左側對齊即可
- # 表示註釋,從這個字元一直到行尾,都會被解析器忽略。
- 字串可以不用引號,也可以使用單引號或者雙引號
資料結構
- 簡單屬性:字面量: 普遍的值(字串,數字,布林,字元等)
k: v:字面直接來寫
字串預設不需要加單引號或者雙引號,如果加雙引號,它不會轉義字串裡面的特殊字元,而加單引號,則會轉義字串裡面的特殊字元,意思就是將特殊字元直接變為字串輸出。
- 複雜屬性:
1、物件、map集合(鍵值對):冒號分隔鍵值對(Key: Value), Key需要頂格寫,前面不能有空格,冒號後面需要有一個空格然後再跟值, 相同的縮排屬於同一個map ,比如:
# 物件:縮排方式
obj:
field1: x
field2: S
# 物件:行內方式
obj: {field1: x,field2: s}
2、陣列(List、set):一組按次序排列的值,又稱為序列(sequence) / 列表(list)。比如:
# 陣列:連字元方式,如果元素也是陣列就再使用一層縮排
array:
- ele1
- ele2
# 陣列:行內方式
array: [elel,ele2]
複雜屬性之間可以巢狀
相關例項
---
# 使用冒號:表示鍵值對, 冒號後面需要有一個空格, key需要頂格寫,前面不能有空格 同一縮排的所有鍵值對屬於一個map
str: 這是一行字串 # 字串預設不使用引號表示
str2: '內容: 字串' # 如果字串之中包含空格或特殊字元,需要放在引號之中
str3: '內容\n字串' # 單引號和雙引號都可以使用,雙引號不會對特殊字元轉義
str4: "內容\n字串" # 雙引號對特殊字元不轉義
str5: 'labor''s day' # 單引號之中如果還有單引號,需要使用單引號轉義
# 字串可以寫成多行,從第二行開始,必須有一個單空格縮排。換行符會被轉為空格
str6: 這是一段
多行
字串
str7: | # "|"表示每行末尾都跟一個換行符
Foo
Bar
str8: > # “>” 最後一行跟一個換行符
Foo
Bar
str9: |
Foo
str10: |+ # +表示保留文字塊末尾的換行
Foo
str11: |- # -表示刪除字串末尾的換行
Foo
str12: | # 字串之中可以插入 HTML 標記
<p style="color: red">
段落
</p>
int: 10
float: 9.99
bool: true # true、false
# 時間採用 ISO8601 格式 1點被轉成9點
date: 2015-08-23 # 日期
datetime: 2015-08-23T02:02:00.1z # 日期時間
iso8601: 2015-08-23t21:59:43.10-05:00 # iso8601 日期格式
spaced: 2015-08-23 21:59:43.10 -5 #
# 物件:縮排方式
obj:
field1: x
field2:
field21: xx
field22: xxx
# 物件:行內方式(和json格式差不多)
obj2: { field1: 'x', field2: { field21: 'xx', field22: 'xxx' } }
# 陣列:連字元方式,如果元素也是陣列就再使用一層縮排
array:
- ele1
- ele2
-
- ele31
- ele32
# 行內方式
array2: [ 'ele1', 'ele2', [ 'ele31', 'ele32' ] ]
# 陣列中的原始是物件
array3:
- field1: x
field2: xx
field3: xxx
- field1: x
field2: xx
field3: xxx
set:
? ele
? ele2
# 巢狀方式
nested:
field1: x
arr:
- {field1: x, field2: x, field3: [1, 2, 3]}
- {field1: x, field2: x, field3: [2, 3, 4]}
arr2:
-
- a
- b
-
- c
- c
# 型別轉換: 使用兩個感嘆號跟要轉換的基本資料型別,單引號:用於轉換自定義物件
#下面是內建型別
#!!int # 整數型別
#!!float # 浮點型別
#!!bool # 布林型別
#!!str # 字串型別
#!!binary # 也是字串型別
#!!timestamp # 日期時間型別
#!!null # 空值
#!!set # 集合
#!!omap, !!pairs # 鍵值列表或物件列表
#!!seq # 序列,也是列表
#!!map # 鍵值表
test: !!str 123
# 當鍵是陣列或者物件時需要使用問號來標記
?[blue, reg, green]: xxx
?{a:xx, b:xx}: xx
# 錨點和引用
ref:
- &index1 a
- b
- *index1
...
如果使用yml檔案格式作為配置檔案的話,那麼還有一個好處,yml檔案支援多文件塊的方式,使用“---”即可,可將編輯的內容分為多個文件,“...”可作為檔案