內(nèi)容轉(zhuǎn)載自我的博客
1. YAML語(yǔ)言概述
YAML 語(yǔ)言的基本語(yǔ)法規(guī)則如下
- 大小寫敏感
- 使用縮進(jìn)表示層級(jí)關(guān)系
- 縮進(jìn)時(shí)不允許使用Tab鍵复颈,只允許使用空格。
- 縮進(jìn)的空格數(shù)目不重要婶博,只要相同層級(jí)的元素左側(cè)對(duì)齊即可
-
#
表示注釋照皆,從這個(gè)字符一直到行尾诸迟,都會(huì)被解析器忽略
YAML 支持的數(shù)據(jù)結(jié)構(gòu)有三種
- 對(duì)象:鍵值對(duì)的集合,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 數(shù)組:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
- 純量(scalars):?jiǎn)蝹€(gè)的宇智、不可再分的值
2. YAML語(yǔ)言的對(duì)象
對(duì)象的一組鍵值對(duì)砾莱,使用冒號(hào)結(jié)構(gòu)表示
animal: pets
相當(dāng)于 JavaScript 的對(duì)象
{ animal: 'pets' }
也允許另一種寫法瑞筐,將所有鍵值對(duì)寫成一個(gè)行內(nèi)對(duì)象
hash: { name: Steve, foo: bar }
相當(dāng)于 JavaScript 的對(duì)象
{
hash: { name: 'Steve', foo: 'bar' }
}
3. YAML語(yǔ)言的數(shù)組
一組連詞線開頭的行,構(gòu)成一個(gè)數(shù)組
- Cat
- Dog
- Goldfish
轉(zhuǎn)為 JavaScript 表示如下
[ 'Cat', 'Dog', 'Goldfish' ]
數(shù)據(jù)結(jié)構(gòu)的子成員是一個(gè)數(shù)組恤磷,則可以在該項(xiàng)下面縮進(jìn)一個(gè)空格
-
- Cat
- Dog
- Goldfish
轉(zhuǎn)為 JavaScript 表示如下
[
[ 'Cat', 'Dog', 'Goldfish' ]
]
數(shù)組也可以采用行內(nèi)表示法
animal: [Cat, Dog]
轉(zhuǎn)為 JavaScript 表示如下
{ animal: [ 'Cat', 'Dog' ] }
4. YAML語(yǔ)言的復(fù)合結(jié)構(gòu)
對(duì)象和數(shù)組可以結(jié)合使用面哼,形成復(fù)合結(jié)構(gòu)
languages:
- Ruby
- Perl
- Python
websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
Perl: use.perl.org
轉(zhuǎn)為 JavaScript 表示如下
{
languages: [ 'Ruby', 'Perl', 'Python' ],
websites:
{
YAML: 'yaml.org',
Ruby: 'ruby-lang.org',
Python: 'python.org',
Perl: 'use.perl.org'
}
}
5. YAML語(yǔ)言的純量
純量是最基本的野宜、不可再分的值。以下數(shù)據(jù)類型都屬于 JavaScript 的純量:字符串魔策、布爾值匈子、整數(shù)、浮點(diǎn)數(shù)闯袒、Null虎敦、時(shí)間、日期政敢、數(shù)值直接以字面量的形式表示
number: 12.30
isSet: true
parent: ~
iso8601: 2001-12-14t21:59:43.10-05:00
date: 1976-07-31
# 使用兩個(gè)感嘆號(hào)其徙,強(qiáng)制轉(zhuǎn)換數(shù)據(jù)類型
e: !!str 123
f: !!str true
轉(zhuǎn)為 JavaScript 如下
{
number: 12.30,
isSet: true,
parent: null,
iso8601: new Date('2001-12-14t21:59:43.10-05:00'),
date: new Date('1976-07-31'),
e: '123',
f: 'true',
}
6. YAML語(yǔ)言的字符串
字符串是最常見,也是最復(fù)雜的一種數(shù)據(jù)類型,字符串默認(rèn)不使用引號(hào)表示
str1: 這是一行字符串
# 字符串之中包含空格喷户、冒號(hào)或特殊字符唾那,需要放在引號(hào)之中
str2: '內(nèi)容: 字符串'
# 單引號(hào)和雙引號(hào)都可以使用,雙引號(hào)不會(huì)對(duì)特殊字符轉(zhuǎn)義
s1: '內(nèi)容\n字符串'
s2: "內(nèi)容\n字符串"
# 單引號(hào)之中如果還有單引號(hào)褪尝,必須連續(xù)使用兩個(gè)單引號(hào)轉(zhuǎn)義
str3: 'labor''s day'
# 字符串可以寫成多行闹获,從第二行開始,必須有一個(gè)單空格縮進(jìn)河哑,換行符會(huì)被轉(zhuǎn)為空格
st4: 這是一段
多行
字符串
# 多行字符串可以使用|保留換行符避诽,也可以使用>折疊換行
this: |
Foo
Bar
that: >
Foo
Bar
# +表示保留文字塊末尾的換行,-表示刪除字符串末尾的換行
s3: |
Foo
s4: |+
Foo
s5: |-
Foo
# 字符串之中可以插入 HTML 標(biāo)記
message: |
<p style="color: red">
段落
</p>
轉(zhuǎn)為 JavaScript 如下
{
str1: '這是一行字符串',
str2: '內(nèi)容: 字符串',
s1: '內(nèi)容\\n字符串',
s2: '內(nèi)容\n字符串',
str3: 'labor\'s day',
str4: '這是一段 多行 字符串',
this: 'Foo\nBar\n',
that: 'Foo Bar\n',
s3: 'Foo\n',
s4: 'Foo\n\n\n',
s5: 'Foo',
message: '\n<p style="color: red">\n 段落\n</p>\n'
}
7. YAML語(yǔ)言的引用
錨點(diǎn)&
和別名*
可以用來(lái)引用
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
&
用來(lái)建立錨點(diǎn)(defaults
)璃谨,<<
表示合并到當(dāng)前數(shù)據(jù)沙庐,*
用來(lái)引用錨點(diǎn)
下面是另一個(gè)例子
- &showell Steve
- Clark
- Brian
- Oren
- *showell
轉(zhuǎn)為 JavaScript 代碼如下
[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]
引用變量和數(shù)組變量示例
country: 中國(guó)
city:
- 北京
- 上海
- 深圳
- 南京
- 重慶
websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
Perl: use.perl.org
myCountry: ${country}
myCity: ${city[0]}
myweb: ${websites.YAML} by zfb