yaml 語(yǔ)言
語(yǔ)法規(guī)則:
1.大小寫敏感
2.使用縮進(jìn)表示 層級(jí)關(guān)系
3.縮進(jìn)時(shí)不允許使用 tab鍵诅岩,只允許使用空格
4縮進(jìn)的空格數(shù)目不重要试吁,只要相同層級(jí)的元素左側(cè)對(duì)齊即可
yaml 支持的數(shù)據(jù)結(jié)構(gòu)有三種
1.對(duì)象:鍵值對(duì)的集合纽甘,又稱為映射 mapping 哈希 hashes 字典 dictionary
2.數(shù)組 一組按次序排列的值纹笼,又稱為序列 sequence 列表 list
3.純量 scalars 單個(gè)的 不可再分的值
二 對(duì)象
對(duì)象的一組鍵值對(duì)饱普,使用 冒號(hào)結(jié)構(gòu)表示
animal:pets
轉(zhuǎn)為JavaScript 如下
{animal: 'pets'}
yaml 也允許另一種寫法孵延,將所有鍵值對(duì)寫成一個(gè)行內(nèi)對(duì)象
hash: {name:steve,foo:bar}
轉(zhuǎn)為JavaScript 如下
{hash:{name:'Steve',foo:'bar'}}
三 數(shù)組
一組連詞線 開頭的行吕漂,構(gòu)成一個(gè)數(shù)組
-cat
-Dog
-Goldfish
轉(zhuǎn)為 JavaScript 如下
['cat','Dog','Goldfish']
數(shù)組結(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']}
四 復(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'
}}
五 純量
純量是最基本的惶凝,不可再分的值,一下數(shù)據(jù)類型都屬于 JavaScript 的純量
1.字符串
2.布爾值
3.整數(shù)
4.浮點(diǎn)數(shù)
5.Null
6.時(shí)間
7.日期
數(shù)值直接以字面量的形式表示
number:12.30
轉(zhuǎn)為JavaScript如下
{number:12.30}
布爾值用 true 和false 表示
isSet :true
轉(zhuǎn)為JavaScript
{isSet:true}
null 用 ~ 表示
parent:~
轉(zhuǎn)為JavaScript 如下
{parents:null}
時(shí)間采用 ISO8601 格式
iso8601:2001-12-14t21:59:43.10-05:00
轉(zhuǎn)為JavaScript 如下
{iso8601:new Date('2001-12-14t21:59:43.10-05:00')}
日期采用復(fù)合 iso8601 格式的年 犬钢、月 苍鲜、日表示
date:1976-07-31
轉(zhuǎn)為 JavaScript如下
{date : new Date('1976-07-31')}
yaml 允許 使用 兩個(gè)感嘆號(hào),強(qiáng)制轉(zhuǎn)換數(shù)據(jù)類型
e :!!str 123
f: !!str true
轉(zhuǎn)為JavaScript 如下
{e:'123',f:'true'}
六 字符串
字符串是最常見玷犹,也是最復(fù)雜的一種數(shù)據(jù)類型
字符串默認(rèn)不使用引號(hào)表示
str: 這是一行字符串
轉(zhuǎn)為 JavaScript如下
{str: '這是一行字符串'}
如果字符串之中包含空格或者特殊字符混滔,需要放在引號(hào)之中
str: '內(nèi)容: 字符串'
轉(zhuǎn)為JavaScript 如下
{str: '內(nèi)容: 字符串'}
單引號(hào)和雙引號(hào)都可以使用,雙引號(hào)不會(huì)對(duì) 特殊字符轉(zhuǎn)義
s1: '內(nèi)容\n字符串'
s2: "內(nèi)容\n字符串"
轉(zhuǎn)為JavaScript如下
{s1:'內(nèi)容\n字符串'歹颓,s2: '內(nèi)容\n字符串'}
單引號(hào)之中如果還有單引號(hào)坯屿,必須連續(xù)使用兩個(gè)單引號(hào)轉(zhuǎn)義
str: 'labor''s day'
轉(zhuǎn)為 JavaScript如下
{str: 'labor's day'}
字符串可以寫成多行,從第二行開始巍扛,必須有一個(gè) 單空格縮進(jìn)领跛,換行符會(huì)被轉(zhuǎn)為空格
str: 這是一段
多行
字符串
轉(zhuǎn)為JavaScript如下
{str: '這是一段 多行 字符串'}
多行字符串可以使用 | 保留換行符,也可以使用 > 折疊換行
this: |
Foo
Bar
that: >
Foo
Bar
轉(zhuǎn)為 JavaScript 代碼 如下
{this:'Foo\nBar\n',that: 'Foo Bar\n'}
- 表示 保留文字塊末尾的換行撤奸,— 表示刪除字符串末尾的換行
s1: |
Foo
s2: |+
s3:|-
Foo
轉(zhuǎn)為JavaScript 代碼如下
{s1:'Foo\n',s2:'Foo\n\n\n',s3:'Foo'}
字符串 之中可以插入html 標(biāo)記
message: |
<p stype="color: red" >
段落
</p>
轉(zhuǎn)為JavaScript
{message: '\n<p style="color:red">\n 段落\n</p>\n'}
七 引用
錨點(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: myappp_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ù) 和正則表達(dá)式 的轉(zhuǎn)換
這是 js-yaml 庫(kù)特有的功能,可以把函數(shù)和正則表達(dá)式 轉(zhuǎn)為字符串
example.yml
fn:function () {return 1}
reg: /test/
解析 上面的yml文件的代碼如下
var yaml=require('js-yaml')
var fs=require('fs')
try{
var doc =yaml.load(
fs.readFileSync('./example.yml','utf8')
)
console.log(doc)
}catch(e){
console.log(e)
}
從 JavaScript 對(duì)象還原 到y(tǒng)aml 文件的代碼 如下
var yaml =require('js-yaml')
var fs = require('fs')
var obj={
fn: function(){return 1},
reg:/test/
};
try {
fs.writeFileSync(
'./example.yml',
yaml.dump(obj),
'utf8'
);
} catch(e){
console.log(e)
}