YAML語法規則

YAML是一個可讀性高,用來表達數據序列化的格式。其基本的語法規則是:

  • 大小寫敏感
  • 使用縮進表示層級關係
  • 縮進時不允許使用Tab鍵,只允許使用空格。
  • 縮進的空格數目不重要,只要相同層級的元素左側對齊即可
  • 編輯器:
    • 建議使用能將跳格字符自動轉換成空白字符的編輯器,並且使用定寬度的字體。
    • 編輯器要能正確的處理UTF-8和UTF16編碼

標量定義

字符串

字符串可以用單引號或者雙引號進行包裹起來,在有些情況下也可以不用引號。

A string in YAML
'A singled-quoted string in YAML'
"A double-quoted string in YAML"

如果字符串的首部或者尾部有空白字符,那麼必須使用引號,否則在解析文件的時候會將首部和尾部的空白字符移除。
如果在字符串中包含下面的字符,必須要使用引號,如果你使用單引號的話可以避免轉義,如果使用雙引號那麼在下面的字符前面必須使用轉義字符“\”:

:, {, }, [, ], ,, &, *, #, ?, |, -, <, >, =, !, %, @, `

如果在字符串中包含了如下的控制字符,必須要使用雙引號

\0, \x01, \x02, \x03, \x04, \x05, \x06, \a, \b, \t, \n, \v, \f, \r, \x0e, \x0f, \x10, \x11, \x12, \x13, \x14, \x15, \x16,\x17, \x18, \x19, \x1a, \e, \x1c, \x1d, \x1e, \x1f, \N, \_, \L, \P

此外,在下面這幾種情況下也必須使用引號進行包裹:

  • 當字符串是 true 或者 false (否則的話,會被認爲是一個布爾值);
  • 當字符串是 null或者 ~ (否則的話,會被認爲是一個null);
  • 當字符串像一個數字,比如整數(2,4)、浮點數(2.6,12.3)、科學計數(12e7)等等可以被看作是數字的字符串;
  • 當字符串看起來像一個日期格式(2014-12-31);

如果想通過多行編寫的方式來定義一個字符串,那麼可以使用“>”,換行符會被替換爲1個空格字符。

>
  This is a very long sentence
  that spans several lines in the YAML
  but which will be rendered as a string
  without carriage returns.

每行前面使用2個空格字符表明繼續使用前一種定義語法,並且不會出現在最終的字符串中。

數字

# 整數
12

# 八進制
014

# 十六進制
0x0C

# 浮點數
13.4

# 科學計數法
1.2e+34

# 無窮大
.inf

空值

null或者~

布爾值

true和false

日期

使用ISO-8601標準

2001-12-14t21:59:43.10-05:00
# 簡單的日期
2002-12-14

集合

使用間斷字符“-”來定義元素序列

- PHP
- Perl
- Python

相當於Python中的

['PHP', 'Perl', 'Python']

鍵值對的表示方式:

PHP: 5.2
MySQL: 5.1
Apache: 2.2.20

相當於python中的

{'PHP':5.2, 'MySQL':5.1, 'Apache':'2.2.20'}

YAML中使用縮進或者更多的空格字符來表示嵌套的數據結構,比如下面:

'symfony 1.0':
  Pro: 5.0
  Propel: 1.2
'symfony 1.2':
  Pro: 5.2
  Propel: 1.3

相當於json中:

{
    'symfony 1.0':{
        'Pro': 5.0,
        'Propel':1.2
    },
    'symfony 1.2':{
        'Pro':5.2,
        'Propel':1.3
    }
}

注意:縮進必須使用1個或者更多的空格字符,而不能使用製表符。你也可以使用下面這種嵌套方式:

'Chapter 1':
  - Introduction
  - Event Types
'Chapter 2':
  - Introduction
  - Helpers

序列的定義也可是使用下面的方式:

[PHP, Perl, Python]

嵌套數組的定義也可以使用下面的方式:

{ PHP: 5.2, MySQL: 5.1, Apache: 2.2.20 }

你也可以混合搭配着使用,以提高代碼的可讀性:

'Chapter 1': [Introduction, Event Types]
'Chapter 2': [Introduction, Helpers]
'symfony 1.0': { PHP: 5.0, Propel: 1.2 }
'symfony 1.2': { PHP: 5.2, Propel: 1.3 }

註釋

YAML採用行註釋,使用“#”

# 註釋一行
"symfony 1.0": { PHP: 5.0, Propel: 1.2 } # 在行尾進行註釋
"symfony 1.2": { PHP: 5.2, Propel: 1.3 }

 

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