YAML 學習

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章