YAML基本語法入門

  • 隨着軟件開發的需要,接觸到了許多的配置文件都樂意使用YAML文件來做配置文件,爲了工作需要,學習和了解YAML的語法是非常必要。 YAML是一種數據序列化語言,有些類是於JSON,因爲這種語言對格式要求嚴格,又是以數據本身爲中心的語言,所以很適合做配置文件。文件後綴名以 .yaml.yml 爲後綴名。這裏將對這種語法進行簡單的介紹。

  • 這裏使用JSON來說明YAML的含義

  • 使用工具是YAML和JSON互轉的工具(網站鏈接

注意:

  1. YAML區分大小寫。
  2. YAML在創建YAML文件時不允許使用製表符,只允許使用空格。
  3. YAML同級排首對齊(一般2/4個空格)
  4. YAML鍵值以冒號+空格分開(例如:key: value)

一、縮進和註釋

對於縮進,YAML只有三點要求:

1、只能使用空格

2、同級排首對齊

3、鍵值以冒號+空格分開

註釋使用#進行單行註釋,YAML不支持多行註釋

例如:

YAML:

#正規格式
a: b
c:
  - c1
  - c2
d: 
  key1: value1
  key2: value2
--- 
#值格式錯位,但是格式滿足要求依然正確
c:
  - c1
  -             c2
d: 
  key1:       value1
  key2:              value2

JSON:

//正規格式
{
  "a": "b",
  "c": [
    "c1",
    "c2"
  ],
  "d": {
    "key1": "value1",
    "key2": "value2"
  }
}

//值格式錯位,但是格式滿足要求依然正確
{
  "c": [
    "c1",
    "c2"
  ],
  "d": {
    "key1": "value1",
    "key2": "value2"
  }
}

二、鍵值對、對象、map、list

YMAL:

a: value1           #鍵值對
b:                  #對象
  name: Name
  age: 12
map:                #map
  key1: value1
  key2: value2
list:               #簡單數組
  - 12
  - 13
  - 14
objectlist:         #對象數組
  -
    name: name1
    age: 12
  -
    name: name2
    age: 13
    
?                  #複雜對象,表示key是一個數組,值也是數組,當然對象也可以
    - key1
    - key2
:
    - value1
    - value2

JSON:

{
  "a": "value1",
  "b": {
    "name": "Name",
    "age": 12
  },
  "map": {
    "key1": "value1",
    "key2": "value2"
  },
  "list": [
    12,
    13,
    14
  ],
  "objectlist": [
    {
      "name": "name1",
      "age": 12
    },
    {
      "name": "name2",
      "age": 13
    }
  ],
  "[\"key1\", \"key2\"]": [
    "value1",
    "value2"
  ]
}

YAML中還支持流式(flow)語法表示對象,比如上面例子可以寫爲:

a: value1                                  #鍵值對
b: {name: Name,age: 12}                    #對象 
map: {key1: value1,key2: value2}           #map 
list: [12,13,14]                           #簡單數組
objectlist: [{name: name1,age: 12},{name: name2,age: 13}] #對象數組   
[key1,key2] : [value1,value2]              #複雜對象,表示key是一個數組,值也是數組,當然對象也可以

JSON:

{
  "a": "value1",
  "b": {
    "name": "Name",
    "age": 12
  },
  "map": {
    "key1": "value1",
    "key2": "value2"
  },
  "list": [
    12,
    13,
    14
  ],
  "objectlist": [
    {
      "name": "name1",
      "age": 12
    },
    {
      "name": "name2",
      "age": 13
    }
  ],
  "[\"key1\", \"key2\"]": [
    "value1",
    "value2"
  ]
}

三、基本常量的表示方法

在YAML語法中如何表示基本常量呢,下面舉例說明

# 整數
int:
    - 123
    - 0b1010_0111_0100_1010_1110    #二進制表示
canonical: 12345
decimal: +12,345
sexagecimal: 3:25:45
octal: 014
hexadecimal: 0xC

#浮點數
float:
    - 3.14
    - 6.8523015e+5  #可以使用科學計數法
canonical: 1.23015e+3
exponential: 12.3015e+02
sexagecimal: 20:30.15
fixed: 1,230.15

boolean: 
    - TRUE  #true,True都可以
    - FALSE  #false,False都可以


nullObj:
    nodeName: 'node'
    parent: ~  #使用~表示null
string:
    - Hello world
    - 'Hello world'  #可以使用雙引號或者單引號包裹特殊字符
    - newline
      newline2    #字符串可以拆成多行,每一行會被轉化成一個空格
date:
    - 2019-11-16    #日期必須使用ISO 8601格式,即yyyy-MM-dd
datetime: 
    -  2019-11-16T05:42:31+08:00    #時間使用ISO 8601格式,時間和日期之間使用T連接,最後使用+代表時區

JSON

{
  "int": [
    123,
    685230
  ],
  "canonical": 1230.15,
  "decimal": 12345,
  "sexagecimal": 73809.0,
  "octal": 12,
  "hexadecimal": 12,
  "float": [
    3.14,
    685230.15
  ],
  "exponential": 1230.15,
  "fixed": 1230.15,
  "boolean": [
    true,
    false
  ],
  "nullObj": {
    "nodeName": "node",
    "parent": null
  },
  "string": [
    "Hello world",
    "Hello world",
    "newline newline2"
  ],
  "date": [
    "2019-11-16"
  ],
  "datetime": [
    "2019-11-15 16:42:31 -0500"
  ]
}

四、特殊符號

1、— 和 …

在YAML裏 — 和 …表示文檔的開始和結束,相當於一個文件可以當作多個文件使用

server:
  port: 8080
spring:
  profiles:
    active: dev
---
server:
  port: 8081
spring:
  profiles: dev
...
---
server:
  port: 8082
spring:
  profiles: prod
...

一般情況下…可以省略

server:
  port: 8080
spring:
  profiles:
    active: dev
---
server:
  port: 8081
spring:
  profiles: dev
---
server:
  port: 8082
spring:
  profiles: prod

記住要用…必須是 — 開頭, … 結尾,不能反了使用。

2、"" 和 ''的使用

這個在字符串中使用是有區別的;

雙引號會對字符傳中的特殊字符進行轉譯,但是單引號不會

YMAL

DoubleQuotes: "雙引號\n"
Apostrophe: '單引號\n'

JSON

{
  "DoubleQuotes": "雙引號\n",
  "Apostrophe": "單引號\\n"
}

3、!!

在YAML中 !! 表示強制轉換

YAML

number1: 1234
number2: !!str 1234

JSON

{
  "number1": 1234,
  "number2": "1234"
}

4、> 和 |

符號 > 表示字符串摺疊,下面同級的字符串其實表示一行,保留一個字符串

符號 | 表示字符串換行,每行字符串都保留了一個換行符

YAML

string1: >
  第一行
  第二行
string2: |
  第一行
  第二行
#這一行是爲了添加一個換行符

JSON

{
  "string1": "第一行 第二行\n",
  "string2": "第一行\n第二行\n"
}

5、&、* 和 << 符號的使用

& 表示錨點

* 表示引入

<< 表示合併

YAML

AnchorPoint: &AP {X: 1,Y: 2,Z: 3} #設置錨點,類似於 AP=AnchorPoint
example:
  a: 1
  Introduce: *AP         #引入錨點,類似於 Introduce=AP
  <<: *AP                #合併錨點,類似於 example.push(AP)

JSON

{
  "AnchorPoint": {
    "X": 1,
    "Y": 2,
    "Z": 3
  },
  "example": {
    "a": 1,
    "Introduce": {
      "X": 1,
      "Y": 2,
      "Z": 3
    },
    "X": 1,
    "Y": 2,
    "Z": 3
  }
}

以上就介紹完了YAML的基本語法了,這些基本足夠開發過程中使用了,只有配置中的其他操作,可能需要依託平臺提供的工具才能使用,這裏就不介紹了。

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