Yaml筆記

yaml和json互轉(zhuǎn)測(cè)試網(wǎng)站1
yaml和json互轉(zhuǎn)測(cè)試網(wǎng)站2

基本語(yǔ)法

  • 大小寫敏感
  • 使用縮進(jìn)表示層級(jí)關(guān)系
  • 縮進(jìn)不允許使用tab焙畔,只允許空格
  • 縮進(jìn)的空格數(shù)不重要态鳖,只要相同層級(jí)的元素左對(duì)齊即可
  • '#'表示注釋羊精,從這個(gè)字符一直到行尾,都會(huì)被解析器忽略

支持的數(shù)據(jù)類型

  • 對(duì)象:鍵值對(duì)的集合守问,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 數(shù)組:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
  • 純量(scalars):?jiǎn)蝹€(gè)的名段、不可再分的值

YAML 對(duì)象

對(duì)象鍵值對(duì)使用冒號(hào)結(jié)構(gòu)表示 key: value躏惋,冒號(hào)后面要加一個(gè)空格。
也可以使用 key:{key1: value1, key2: value2, ...}框咙。
還可以使用縮進(jìn)表示層級(jí)關(guān)系取具;

key: 
    child-key: value
    child-key2: value2

較為復(fù)雜的對(duì)象格式,可以使用問(wèn)號(hào)加一個(gè)空格代表一個(gè)復(fù)雜的 key扁耐,配合一個(gè)冒號(hào)加一個(gè)空格代表一個(gè) value:

?  
    - complexkey1
    - complexkey2
:
    - complexvalue1
    - complexvalue2
# 意思即對(duì)象的屬性是一個(gè)數(shù)組 [complexkey1,complexkey2]暇检,對(duì)應(yīng)的值也是一個(gè)數(shù)組 [complexvalue1,complexvalue2]
'complexkey1,complexkey2': [ 'complexvalue1', 'complexvalue2' ]

YAML 數(shù)組

以 - 開(kāi)頭的行表示構(gòu)成一個(gè)數(shù)組,如果不加-則會(huì)被合并成一個(gè)元素婉称,比如:

key:
  - val1
  - val2
  - val3
# YAML 支持多維數(shù)組块仆,可以使用行內(nèi)表示,所以以上數(shù)組等價(jià)于:
key: [val1, val2, val3]

# 如果不加 -
key:
  val1
  val2
  val3
# 則上述內(nèi)容會(huì)被表述為:
key: 'val1 val2 val3'

數(shù)據(jù)結(jié)構(gòu)的子成員是一個(gè)數(shù)組王暗,則可以在該項(xiàng)下面縮進(jìn)一個(gè)空格悔据。

-
 - A
 - B
 - C
#轉(zhuǎn)為 JavaScript 如下。
[ [ 'Cat', 'Dog', 'Goldfish' ] ]

一個(gè)相對(duì)復(fù)雜的例子:

companies:
    -
        id: 1
        name: company1
        price: 200W
    -
        id: 2
        name: company2
        price: 500W
# 意思是 companies 屬性是一個(gè)數(shù)組俗壹,每一個(gè)數(shù)組元素又是由 id科汗、name、price 三個(gè)屬性構(gòu)成绷雏。

# 數(shù)組也可以使用流式(flow)的方式表示:
companies: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]

復(fù)合結(jié)構(gòu)

數(shù)組和對(duì)象可以構(gòu)成復(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)換為 json 為:

{ 
  languages: [ 'Ruby', 'Perl', 'Python'],
  websites: {
    YAML: 'yaml.org',
    Ruby: 'ruby-lang.org',
    Python: 'python.org',
    Perl: 'use.perl.org' 
  } 
}

純量

純量是最基本的,不可再分的值涎显,包括:

  1. 字符串
  2. 布爾值
  3. 整數(shù)
  4. 浮點(diǎn)數(shù)
  5. Null(用~表示坤检,即ESC鍵下面的那個(gè))
  6. 時(shí)間
  7. 日期

YAML 允許使用兩個(gè)感嘆號(hào),強(qiáng)制轉(zhuǎn)換數(shù)據(jù)類型期吓。

e: !!str 123
f: !!str true
# 轉(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ì)主動(dòng)對(duì)特殊字符轉(zhuǎn)義逝段,雙引號(hào)不會(huì)主動(dòng)對(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' }

# 字符串可以寫成多行嘹黔,從第二行開(kāi)始账嚎,必須有一個(gè)單空格縮進(jìn)。換行符會(huì)被轉(zhuǎn)為空格儡蔓。
str: 這是一段
  多行
  字符串
# 轉(zhuǎn)為 JavaScript 如下郭蕉。
{ str: '這是一段 多行 字符串' }

# 多行字符串可以使用|保留換行符,也可以使用>折疊換行喂江。
this: |
  Foo
  Bar
that: >
  Foo
  Bar
end:~
# 轉(zhuǎn)為 JavaScript 代碼如下召锈。
{ this: 'Foo\nBar\n', that: 'Foo Bar\n' }

# +表示保留文字塊末尾的換行,-表示刪除字符串末尾的換行获询。
s1: |
  Foo
s2: |+
  Foo
s3: |-
  Foo
s4: |-
  Foo
  Bar
s5: >-
  Foo
# 轉(zhuǎn)為 JavaScript 代碼如下涨岁。
{ s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' , s4: 'Foo\nBar', s5: 'Foo'}

# 字符串之中可以插入 HTML 標(biāo)記。
message: |
  <p style="color: red">
    段落
  </p>
end:~
# 轉(zhuǎn)為 JavaScript 如下吉嚣。
{ message: '\n<p style="color: red">\n  段落\n</p>\n' }

使用一個(gè)例子來(lái)快速了解純量的基本使用:

boolean: 
    - TRUE  #true,True都可以
    - FALSE  #false梢薪,F(xiàn)alse都可以
float:
    - 3.14
    - 6.8523015e+5  #可以使用科學(xué)計(jì)數(shù)法
int:
    - 123
    - 0b1010_0111_0100_1010_1110    #二進(jìn)制表示
null:
    nodeName: 'node'
    parent: ~  #使用~表示null
string:
    - 哈哈
    - 'Hello world'  #可以使用雙引號(hào)或者單引號(hào)包裹特殊字符
    - newline
      newline2    #字符串可以拆成多行,每一行會(huì)被轉(zhuǎn)化成一個(gè)空格
date:
    - 2018-02-17    #日期必須使用ISO 8601格式尝哆,即yyyy-MM-dd
datetime: 
    -  2018-02-17T15:02:31+08:00    #時(shí)間使用ISO 8601格式秉撇,時(shí)間和日期之間使用T連接,最后使用+代表時(shí)區(qū)

引用

& 錨點(diǎn)和 * 別名秋泄,可以用來(lái)引用:

defaults: &defaults
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  <<: *defaults

test:
  database: myapp_test
  <<: *defaults

# 相當(dāng)于:

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' ]

完整例子

# Collection Types #############################################################
################################################################################

# http://yaml.org/type/map.html -----------------------------------------------#

map:
  # Unordered set of key: value pairs.
  Block style: !!map
    Clark : Evans
    Ingy  : d?t Net
    Oren  : Ben-Kiki
  Flow style: !!map { Clark: Evans, Ingy: d?t Net, Oren: Ben-Kiki }

# http://yaml.org/type/omap.html ----------------------------------------------#

omap:
  # Explicitly typed ordered map (dictionary).
  Bestiary: !!omap
    - aardvark: African pig-like ant eater. Ugly.
    - anteater: South-American ant eater. Two species.
    - anaconda: South-American constrictor snake. Scaly.
    # Etc.
  # Flow style
  Numbers: !!omap [ one: 1, two: 2, three : 3 ]

# http://yaml.org/type/pairs.html ---------------------------------------------#

pairs:
  # Explicitly typed pairs.
  Block tasks: !!pairs
    - meeting: with team.
    - meeting: with boss.
    - break: lunch.
    - meeting: with client.
  Flow tasks: !!pairs [ meeting: with team, meeting: with boss ]

# http://yaml.org/type/set.html -----------------------------------------------#

set:
  # Explicitly typed set.
  baseball players: !!set
    ? Mark McGwire
    ? Sammy Sosa
    ? Ken Griffey
  # Flow style
  baseball teams: !!set { Boston Red Sox, Detroit Tigers, New York Yankees }

# http://yaml.org/type/seq.html -----------------------------------------------#

seq:
  # Ordered sequence of nodes
  Block style: !!seq
  - Mercury   # Rotates - no light/dark sides.
  - Venus     # Deadliest. Aptly named.
  - Earth     # Mostly dirt.
  - Mars      # Seems empty.
  - Jupiter   # The king.
  - Saturn    # Pretty.
  - Uranus    # Where the sun hardly shines.
  - Neptune   # Boring. No rings.
  - Pluto     # You call this a planet?
  Flow style: !!seq [ Mercury, Venus, Earth, Mars,      # Rocks
                      Jupiter, Saturn, Uranus, Neptune, # Gas
                      Pluto ]                           # Overrated


# Scalar Types #################################################################
################################################################################

# http://yaml.org/type/bool.html ----------------------------------------------#

bool:
  - true
  - True
  - TRUE
  - false
  - False
  - FALSE

# http://yaml.org/type/float.html ---------------------------------------------#

float:
  canonical: 6.8523015e+5
  exponentioal: 685.230_15e+03
  fixed: 685_230.15
  negative infinity: -.inf
  not a number: .NaN

# http://yaml.org/type/int.html -----------------------------------------------#

int:
  canonical: 685230
  decimal: +685_230
  octal: 0o2472256
  hexadecimal: 0x_0A_74_AE
  binary: 0b1010_0111_0100_1010_1110

# http://yaml.org/type/merge.html ---------------------------------------------#

merge:
  - &CENTER { x: 1, y: 2 }
  - &LEFT { x: 0, y: 2 }
  - &BIG { r: 10 }
  - &SMALL { r: 1 }

  # All the following maps are equal:

  - # Explicit keys
    x: 1
    y: 2
    r: 10
    label: nothing

  - # Merge one map
    << : *CENTER
    r: 10
    label: center

  - # Merge multiple maps
    << : [ *CENTER, *BIG ]
    label: center/big

  - # Override
    << : [ *BIG, *LEFT, *SMALL ]
    x: 1
    label: big/left/small

# http://yaml.org/type/null.html ----------------------------------------------#

null:
  # This mapping has four keys,
  # one has a value.
  empty:
  canonical: ~
  english: null
  ~: null key
  # This sequence has five
  # entries, two have values.
  sparse:
    - ~
    - 2nd entry
    -
    - 4th entry
    - Null

# http://yaml.org/type/str.html -----------------------------------------------#

string: abcd

# http://yaml.org/type/timestamp.html -----------------------------------------#

timestamp:
  canonical:        2001-12-15T02:59:43.1Z
  valid iso8601:    2001-12-14t21:59:43.10-05:00
  space separated:  2001-12-14 21:59:43.10 -5
  no time zone (Z): 2001-12-15 2:59:43.10
  date (00:00:00Z): 2002-12-14


# Custom types #################################################################
################################################################################


# JS-YAML allows you to specify a custom YAML types for your structures.
# This is a simple example of custom constructor defined in `js/demo.js` for
# custom `!sexy` type:
#
# var SexyYamlType = new jsyaml.Type('!sexy', {
#   kind: 'sequence',
#   construct: function (data) {
#     return data.map(function (string) { return 'sexy ' + string; });
#   }
# });
#
# var SEXY_SCHEMA = jsyaml.Schema.create([ SexyYamlType ]);
#
# result = jsyaml.load(yourData, { schema: SEXY_SCHEMA });

foobar: !sexy
  - bunny
  - chocolate

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末啡捶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子奸焙,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件与帆,死亡現(xiàn)場(chǎng)離奇詭異了赌,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)玄糟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門勿她,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人阵翎,你說(shuō)我怎么就攤上這事逢并。” “怎么了郭卫?”我有些...
    開(kāi)封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵砍聊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我贰军,道長(zhǎng)玻蝌,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任词疼,我火速辦了婚禮俯树,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贰盗。我一直安慰自己许饿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布舵盈。 她就那樣靜靜地躺著米辐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪书释。 梳的紋絲不亂的頭發(fā)上翘贮,一...
    開(kāi)封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音爆惧,去河邊找鬼狸页。 笑死,一個(gè)胖子當(dāng)著我的面吹牛扯再,可吹牛的內(nèi)容都是我干的芍耘。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼熄阻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼斋竞!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起秃殉,我...
    開(kāi)封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤坝初,失蹤者是張志新(化名)和其女友劉穎浸剩,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鳄袍,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绢要,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拗小。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片重罪。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖哀九,靈堂內(nèi)的尸體忽然破棺而出剿配,到底是詐尸還是另有隱情,我是刑警寧澤阅束,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布呼胚,位于F島的核電站,受9級(jí)特大地震影響围俘,放射性物質(zhì)發(fā)生泄漏砸讳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一界牡、第九天 我趴在偏房一處隱蔽的房頂上張望簿寂。 院中可真熱鬧,春花似錦宿亡、人聲如沸常遂。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)克胳。三九已至,卻和暖如春圈匆,著一層夾襖步出監(jiān)牢的瞬間漠另,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工跃赚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笆搓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓纬傲,卻偏偏與公主長(zhǎng)得像满败,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叹括,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

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