SpringBoot 2.X課程學習 | 第五篇:yml語法讓配置文件更加簡潔易讀

簡介

      YAML 是一種簡潔的非標記語言(YAML Ain’t Markup Language),YAML以數據爲中心,使用空白,縮進,分行組織數據,從而使得表示更加簡潔易讀, 經常使用於做爲配置文件, 比json更加簡潔。json

YAML 的設計目標

  • 人類容易閱讀
  • 可用於不一樣程序間的數據交換
  • 適合描述程序所使用的數據結構,特別是腳本語言
  • 豐富的表達能力與可擴展性
  • 易於使用

YAML與XML、JSON比較

  • YAML 與 XML:具備 XML 一樣的優勢,但比 XML 更加簡單、敏捷等
  • YAML 與 JSON:

            一、JSON 能夠看做是 YAML 的子集,也就是說 JSON 可以作的事情,YAML 也可以作數組

            二、YAML 能表示得比 JSON 更加簡單和閱讀,例如「字符串不須要引號」。因此 YAML 容易能夠寫成 JSON 的格式,但並不建議這種作數據結構

            三、YAML 可以描述比 JSON 更加複雜的結構,例如「關係錨點」能夠表示數據引用(如重複數據的引用)spa

YAML的適用範圍

  •  因爲實現簡單,解析成本很低,YAML特別適合在腳本語言中使用。列一下現有的語言實現:Ruby,Java,Perl,Python,PHP,OCaml,JavaScript。除了Java,其餘都是腳本語言.
  • YAML比較適合作序列化。由於它是宿主語言數據類型直轉的,因爲兼容性問題,不一樣語言間的數據流轉建議如今不要用YAML.
  • YAML作配置文件也不錯。好比Ruby on Rails的配置就選用的YAML。對ROR而言,這很天然,也很省事.

語法

  • 大小寫敏感
  • 使用縮進表示層級關係
  • 禁止使用tab縮進,只能使用空格鍵 , 建議使用兩個空格
  • 縮進的空格數目不重要,只要相同層級的元素左側對齊便可
  • # 表示註釋,從這個字符一直到行尾,都會被解析器忽略。
  • 字符串能夠不用引號,也可使用單引號或者雙引號

數據結構

  • 簡單屬性:字面量: 廣泛的值(字符串,數字,布爾,字符等)

                        k: v:字面直接來寫設計

                        字符串默認不須要加單引號或者雙引號,若是加雙引號,它不會轉義字符串裏面的特殊字符,而加單引號,則會轉義字符串裏面的特殊字符,意思就是將特殊字符直接變爲字符串輸出。code

  • 複雜屬性:

          一、對象、map集合(鍵值對):冒號分隔鍵值對(Key: Value), Key須要頂格寫,前面不能有空格,冒號後面須要有一個空格而後再跟值, 相同的縮進屬於同一個map ,好比:對象

# 對象:縮進方式
obj: 
 field1: x
 field2: S

# 對象:行內方式
obj: {field1: x,field2: s}

           二、數組(List、set):一組按次序排列的值,又稱爲序列(sequence) / 列表(list)。好比:ip

# 數組:連字符方式,若是元素也是數組就再使用一層縮進
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文件支持多文檔塊的方式,使用「---」便可,可將編輯的內容分爲多個文檔,「...」可做爲文件的結尾。字符串

相關文章
相關標籤/搜索