SpringCloud入門之YAML格式文件規范學習


1. 認識 YAML

  YAML(發音 /ˈjæməl/)是一個類似 XML、JSON 的數據序列化語言。其強調以數據為中心,旨在方便人類使用;並且適用於日常常見任務的現代編程語言。因而 YAML 本身的定義比較簡單,號稱“一種人性化的數據格式語言”。

1.1 YAML 的設計目標:
  • 人類容易閱讀

  • 可用於不同程序間的數據交換

  • 適合描述程序所使用的數據結構,特別是腳本語言

  • 豐富的表達能力與可擴展性

  • 易於使用

1.2 YAML 與 XML、JSON
  • YAML 與 XML

    • 具有 XML 同樣的優點,但比 XML 更加簡單、敏捷等
  • YAML 與 JSON

    • JSON 可以看作是 YAML 的子集,也就是說 JSON 能夠做的事情,YAML 也能夠做

    • YAML 能表示得比 JSON 更加簡單和閱讀,例如“字符串不需要引號”。所以 YAML 容易可以寫成 JSON 的格式,但並不建議這種做

    • YAML 能夠描述比 JSON 更加復雜的結構,例如“關系錨點”可以表示數據引用(如重復數據的引用)。

1.3 YAML 組織結構

  YAML 文件可以由一或多個文檔組成(也即相對獨立的組織結構組成),文檔間使用“---”(三個橫線)在每文檔開始作為分隔符。同時,文檔也可以使用“...”(三個點號)作為結束符(可選)。如下圖所示:

文檔示圖

 

  • 如果只是單個文檔,分隔符“---”可省略。

  • 每個文檔並不需要使用結束符“...”來表示結束,但是對於網絡傳輸或者流來說,作為明確結束的符號,有利於軟件處理。(例如不需要知道流關閉就能知道文檔結束) <br/>

  YAML 認為數據由以下三種結構組成:(每個文檔由三種結構混合組成)

  • 標量 (相當於數據類型)

  • 序列 (相當於數組和列表)

  • 鍵值表(相當於 Map 表)

2. YAML 編寫規范

    它的基本語法規則如下:

          1)大小寫敏感

          2)使用縮進表示層級關系

          3)縮進時不允許使用Tab鍵,只允許使用空格。

          4)縮進的空格數目不重要,只要相同層級的元素左側對齊即可

 

  • 規范一:文檔使用 Unicode 編碼作為字符標准編碼,例如 UTF-8

  • 規范二:使用“#”來表示注釋內容

    # 客戶訂單 date: 2015-02-01 customer:  - name: Jai items:  - no: 1234 # 訂單號  - descript: cpu 
  • 規范三:使用空格作為嵌套縮進工具。通常建議使用兩個空格縮進,不建議使用 tab (甚至不支持)

  • 規范四:序列表示

    • 使用“-”(橫線) + 單個空格表示單個列表項
      --- # 文檔開始 - 第一章 簡介 - 第二章 設計目錄 
    • 使用"[]"表示一組數據
      --- # 文檔開始 [blue, red, green] 
    • 組合表示。每個結構都可以嵌套組成復雜的表示結構。
      --- # 文檔開始 - [blue, red, green] # 列表項本身也是一個列表 - [Age, Bag] - site: {osc:www.oschina.net, baidu: www.baidu.com} # 這里是同 鍵值表 組合表示
  • 規范五:鍵值表

    • 使用 “:”(冒號) + 空格表示單個鍵值對
      # 客戶訂單 date: 2015-02-01 customer:  - name: Jai items:  - no: 1234 # 訂單號  - descript: cpu  - price: ¥800.00 
    • 使用"{}"表示一個鍵值表
      # 客戶訂單 date: 2015-02-01 customer:  - name: Jai items: {no: 1234, descript: cpu, price: ¥800.00} 
    • "? " 問號+空格表示復雜的鍵。當鍵是一個列表或鍵值表時,就需要使用本符號來標記。
       # 使用一個列表作為鍵
       ? [blue, reg, green]: Color
       # 等價於
       ? - blue
         - reg - gree : Color 
    • 組合表示。每個結構都可以嵌套組成復雜的表示結構。 

       Color: - blue - red - green # 相當於 (也是 JSON 的表示) {Color: [blue, red, green]} div: - border: {color: red, width: 2px} - background: {color: green} - padding: [0, 10px, 0, 10px] # 使用縮進表示的鍵值表與列表項 items: - item: cpu model: i3 price: ¥800.00 - item: HD model: WD price: ¥450.00 # 上面使用 “-” 前導與縮進來表示多個列表項,相當於下面的JSON表示 items: [{item:cpu, model:i3, price:¥800.00}, {item:HD, model:WD, price: ¥450.00}] 
  • 規范六:文本塊

    • 使用 “|” 和文本內容縮進表示的塊:保留塊中已有的回車換行。相當於段落塊

      yaml: | # 注意 ":" 與 "|" 之間的空格 JSON的語法其實是YAML的子集,大部分的JSON文件都可以被YAML的解釋器解釋。 
    • 使用 “>” 和文本內容縮進表示的塊:將塊中回車替換為空格,最終連接成一行。

      yaml: > # 注意 ":" 與 ">" 之間的空格,另外可以使用空行來分段落 JSON的語法其實是YAML的子集, 大部分的JSON文件都可以被YAML的解釋器解釋。 
    • 使用定界符“”(雙引號)、‘’(單引號)或回車表示的塊:最終表示成一行。

      yaml: # 使用回車的多行,最終連接成一行。 JSON的語法其實是YAML的子集, 大部分的JSON文件都可以被YAML的解釋器解釋。 yaml: # 使用了雙引號,雙引號的好處是可以轉義,即在里面可以使用特殊符號 "JSON的語法其實是YAML的子集, 大部分的JSON文件都可以被YAML的解釋器解釋。" 
  • 規范七:數據類型的約定

    • 對一些常用數據類型的表示格式進行了約定,包括:

       integer: 12345 # 整數標准形式  octal: 0o34 # 八進制表示,第二個是字母 o  hex: 0xFF # 十六進制表示  float: 1.23e+3 # 浮點數  fixed: 13.67 # 固定小數  minmin: -.inf # 表示負無窮  notNumber: .NaN # 無效數字  null: # 空值  boolean: [true, false] # 布爾值  string: '12345' # 字符串  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 # ? 
    • “!”(嘆號)顯式指示類型,或自定義類型標識。單嘆號通常是自定義類型,雙嘆號是內置類型

       isString: !!str 2015-08-23 # 強調是字符串不是日期數據  picture: !!binary | # Base64 圖片 R0lGODlhDAAMAIQAAP//9/X 17unp5WZmZgAAAOfn515eXv Pz7Y6OjuDg4J+fn5OTk6enp 56enmleECcgggoBADs= #下面是內置類型 !!int # 整數類型 !!float # 浮點類型 !!bool # 布爾類型 !!str # 字符串類型 !!binary # 也是字符串類型 !!timestamp # 日期時間類型 !!null # 空值 !!set # 集合 !!omap, !!pairs # 鍵值列表或對象列表 !!seq # 序列,也是列表 !!map # 鍵值表 #下面是一些例子:  --- !!omap  - Mark: 65  - Sammy: 63  - Key: 58  --- !!set # 注意,“?”表示鍵為列表,在這里列表為 null ? Mark ? Sammy ? Key # 下面是自定義的類型或標識 %TAG ! tag:clarkevans.com,2002: # % 是指令符號  --- !shape # Use the ! handle for presenting # tag:clarkevans.com,2002:circle  - !circle  center: &ORIGIN {x: 73, y: 129}  radius: 7  - !line  start: *ORIGIN  finish: { x: 89, y: 102 }  - !label  start: *ORIGIN  color: 0xFFEEBB  text: Pretty vector drawing. 
  • 規范八:錨點與引用,定義數據的復用。

    • 第一步:使用 “&” 定義數據錨點(即要復制的數據)
    • 第二步:使用 “*” 引用上述錨點數據(即數據的復制目的地)
       --- hr: - Mark McGwire # Following node labeled SS - &SS Sammy Sosa # 定義要復制的數據 rbi: - *SS # Subsequent occurrence 這里是數據復制目標 - Ken Griffey
      詳盡語法見官網:http://www.yaml.org/spec/1.2/spec.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM