link:? ?http://www.ruanyifeng.com/blog/2016/07/yaml.html
一、簡(jiǎn)介
YAML 語(yǔ)言(發(fā)音 /?j?m?l/ )的設(shè)計(jì)目標(biāo)畔濒,就是方便人類讀寫剩晴。它實(shí)質(zhì)上是一種通用的數(shù)據(jù)串行化格式。
它的基本語(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è)的闯团、不可再分的值
以下分別介紹這三種數(shù)據(jù)結(jié)構(gòu)。
二仙粱、對(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ù)據(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']}
四密幔、復(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 的純量。
字符串
布爾值
整數(shù)
浮點(diǎn)數(shù)
Null
時(shí)間
日期
數(shù)值直接以字面量的形式表示皆串。
number:12.30
轉(zhuǎn)為 JavaScript 如下淹办。
{number:12.30}
布爾值用true和false表示。
isSet:true
轉(zhuǎn)為 JavaScript 如下恶复。
{isSet:true}
null用~表示怜森。
parent:~
轉(zhuǎn)為 JavaScript 如下。
{parent:null}
時(shí)間采用 ISO8601 格式谤牡。
iso8601:2001-12-14t21:59:43.10-05:00
轉(zhuǎn)為 JavaScript 如下副硅。
{iso8601:newDate('2001-12-14t21:59:43.10-05:00')}
日期采用復(fù)合 iso8601 格式的年、月翅萤、日表示恐疲。
date:1976-07-31
轉(zhuǎn)為 JavaScript 如下。
{date:newDate('1976-07-31')}
YAML 允許使用兩個(gè)感嘆號(hào)套么,強(qiáng)制轉(zhuǎn)換數(shù)據(jù)類型培己。
e:!!str123
f:!!strtrue
轉(zhuǎn)為 JavaScript 如下。
{e:'123',f:'true'}
六胚泌、字符串
字符串是最常見(jiàn)省咨,也是最復(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:|+
Foos
3:|-
Foo
轉(zhuǎn)為 JavaScript 代碼如下。
{s1:'Foo\n',s2:'Foo\n\n\n',s3:'Foo'}
字符串之中可以插入 HTML 標(biāo)記髓需。
message:|
段落
轉(zhuǎn)為 JavaScript 如下许师。
{message:'\n
\n? 段落\n
\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: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']
工具:https://www.json2yaml.com/