YAML 語言語法

發現不少開源的軟件的配置文件都使用了這種語言來描述,聽說是簡單強大,很不巧,ansible也使用了這種語言來描述配置,學習ansible以前,先學習一下YAML語言。javascript

 

YAML基本語法規則以下:java

    大小寫敏感python

    使用縮進表示層級關係web

    縮進時不容許使用Tab建,只容許使用空格。數組

    縮進的空格數目不重要,只要是相同層級的元素左對齊便可ruby

 

#表示註釋,從這個字符一直到行尾,都會被解析器忽略。數據結構

 

YAML支持的數據結構有三種。app

    對象:鍵值對的集合,又稱爲映射(mapping)/哈希(hashed)/字典(dictionary)post

    數組:一組按次序排列的值,又稱爲序列(sequence)/列表(list)學習

    純量(scalars):單個的、不可再分的值

下面分別介紹這三種數據結構。

 

對象

------------------------------------------------------------------

對象是一組鍵值對,使用冒號結構來表示。

    animal:pets

YAML也容許另一種寫法,將全部的鍵值對寫成一個行內對象。

    hash:{name:Steve,foo:bar}

 

數組

--------------------------------------------------------------------

一組連詞線開頭的行,構成一個數組。

    - Cat

    - Dog

    - Goldfish

數組結構的子成員是一個數組,則能夠在該項下面縮進一個空格表示。

    -

      - Cat

      - Dog

      - Goldfish

數組也能夠採用行內元素的表示方法。

    animal:[Cat,Dog]

 

複合結構

-----------------------------------------------------------------------

對象和數組能夠結合使用,造成複合結構。

languages:

  - Ruby

  - Perl

  - Python

websites:

  YAML: yaml.org

  Ruby: ruby-lang.org

  Python: python.org

  Perl: usr.perl.org

 

純量

-------------------------------------------------------------------------

純量主要有一下幾種。

    字符串

    布爾值

    整數

    浮點數

    Null

    時間

    日期

數值直接以字面量的形式表示。

   number:12.30

布爾值用true和false表示。

    isSet:true

null使用~表示。

    parent:~

時間採用ISO8601格式。

   iso8601: 2001-12-14t21:59:43.10-05:00

日期採用ISO8601格式。

    date: 1976-07-31

YAML容許使用兩個感嘆號強制轉換數據類型。

    e: !!str 123

  f: !!str true

 

字符串

-------------------------------------------------------------------------

字符串是最多見,也是最複雜的一種數據類型。

默認字符串不使用引號表示。

    str:這是一行字符串

若是字符串中包含空格或特殊字符,需放在引號之中。

    str:'內容:字符串'

單引號和雙引號均可以使用,雙引號不會對特殊字符串轉義。

    s1:'內容\n字符串'

    s2:"內容\n字符串"

轉爲 JavaScript 以下。

    { s1: '內容\\n字符串', s2: '內容\n字符串' }

單引號之中若是還有單引號,必須連續使用兩個單引號轉義。

    str: 'labor''s day'

轉爲 JavaScript 以下。

    { str: 'labor\'s day' }

字符串能夠寫成多行,從第二行開始,必須有一個單空格縮進。換行符會被轉爲空格。

    str: 這 是一段

    多行

    字串

轉爲 JavaScript 以下。

{ str: '這是一段 多行 字符串' }

多行字符串能夠使用|保留換行符,也能夠使用>摺疊換行。



this: | Foo Bar that: > Foo Bar

轉爲 JavaScript 代碼以下。

 { this: 'Foo\nBar\n', that: 'Foo Bar\n' }

 

+表示保留文字塊末尾的換行,-表示刪除字符串末尾的換行。

s1: |
  Foo

s2: |+
  Foo


s3: |-
  Foo

 轉爲 JavaScript 代碼以下。

{ s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' }

 

引用

------------------------------------------------------------------------

錨點&和別名*,能夠用來引用。

defaults: &defaults
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  <<: *defaults

test:
  database: myapp_test
  <<: *defaults

等同於下面的代碼。

 defaults:
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  adapter:  postgres
  host:     localhost

test:
  database: myapp_test
  adapter:  postgres
  host:     localhost

&用來創建錨點(defaults),<<表示合併到當前數據,*用來引用錨點。

下面是另外一個例子。

- &showell Steve
- Clark
- Brian
- Oren
- *showell

轉爲 JavaScript 代碼以下。

[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]
相關文章
相關標籤/搜索