yaml 語(yǔ)言 語(yǔ)法 規(guī)則

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)
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末府喳,一起剝皮案震驚了整個(gè)濱河市蒲肋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钝满,老刑警劉巖肉津,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異舱沧,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)偶洋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門熟吏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事牵寺『芬” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵帽氓,是天一觀的道長(zhǎng)趣斤。 經(jīng)常有香客問我,道長(zhǎng)黎休,這世上最難降的妖魔是什么浓领? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮势腮,結(jié)果婚禮上联贩,老公的妹妹穿的比我還像新娘。我一直安慰自己捎拯,他們只是感情好泪幌,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著署照,像睡著了一般祸泪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上建芙,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天没隘,我揣著相機(jī)與錄音,去河邊找鬼岁钓。 笑死升略,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的屡限。 我是一名探鬼主播品嚣,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼钧大!你這毒婦竟也來(lái)了翰撑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤啊央,失蹤者是張志新(化名)和其女友劉穎眶诈,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓜饥,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逝撬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乓土。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宪潮。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡溯警,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出狡相,到底是詐尸還是另有隱情梯轻,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布尽棕,位于F島的核電站喳挑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏滔悉。R本人自食惡果不足惜伊诵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望氧敢。 院中可真熱鬧日戈,春花似錦、人聲如沸孙乖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)唯袄。三九已至弯屈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恋拷,已是汗流浹背资厉。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蔬顾,地道東北人宴偿。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像诀豁,于是被迫代替她去往敵國(guó)和親窄刘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容