❲阮一峰❳YAML 語言教程

2021-02-19 VanillaOpenResty開發
來源:阮一峰
原文地址:http://www.ruanyifeng.com/blog/2016/07/yaml.html  

編程免不了要寫配置文件,怎麼寫配置也是一門學問。

YAML 是專門用來寫配置文件的語言,非常簡潔和強大,遠比 JSON 格式方便。

本文介紹 YAML 的語法,以 JS-YAML(https://github.com/nodeca/js-yaml) 的實現為例。你可以去在線 Demo(http://nodeca.github.io/js-yaml/) 驗證下面的例子。

YAML 語言(發音 /ˈjæməl/ )的設計目標,就是方便人類讀寫。它實質上是一種通用的數據串行化格式。

它的基本語法規則如下。

# 表示注釋,從這個字符一直到行尾,都會被解析器忽略。

YAML 支持的數據結構有三種。

以下分別介紹這三種數據結構。

對象的一組鍵值對,使用冒號結構表示。

轉為 JavaScript 如下。

Yaml 也允許另一種寫法,將所有鍵值對寫成一個行內對象。


hash: { name: Steve, foo: bar }

轉為 JavaScript 如下。


{ hash: { name: 'Steve', foo: 'bar' } }

一組連詞線開頭的行,構成一個數組。

轉為 JavaScript 如下。


[ 'Cat', 'Dog', 'Goldfish' ]

數據結構的子成員是一個數組,則可以在該項下面縮進一個空格。

轉為 JavaScript 如下。


[ [ 'Cat', 'Dog', 'Goldfish' ] ]

數組也可以採用行內表示法。

轉為 JavaScript 如下。


{ animal: [ 'Cat', 'Dog' ] }

對象和數組可以結合使用,形成複合結構。


languages: - Ruby - Perl - Python websites: YAML: yaml.org Ruby: ruby-lang.org Python: python.org Perl: use.perl.org

轉為 JavaScript 如下。


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

純量是最基本的、不可再分的值。以下數據類型都屬於 JavaScript 的純量。

數值直接以字面量的形式表示。

轉為 JavaScript 如下。

布爾值用true和false表示。

轉為 JavaScript 如下。

null用~表示。

轉為 JavaScript 如下。

時間採用 ISO8601 格式。


iso8601: 2001-12-14t21:59:43.10-05:00

轉為 JavaScript 如下。


{ iso8601: new Date('2001-12-14t21:59:43.10-05:00') }

日期採用複合 iso8601 格式的年、月、日表示。

轉為 JavaScript 如下。


{ date: new Date('1976-07-31') }

YAML 允許使用兩個感嘆號,強制轉換數據類型。


e: !!str 123f: !!str true

轉為 JavaScript 如下。

字符串是最常見,也是最複雜的一種數據類型。

字符串默認不使用引號表示。

轉為 JavaScript 如下。

如果字符串之中包含空格或特殊字符,需要放在引號之中。

轉為 JavaScript 如下。

單引號和雙引號都可以使用,雙引號不會對特殊字符轉義。


s1: '內容\n字符串's2: "內容\n字符串"

轉為 JavaScript 如下。


{ s1: '內容\\n字符串', s2: '內容\n字符串' }

單引號之中如果還有單引號,必須連續使用兩個單引號轉義。

轉為 JavaScript 如下。

字符串可以寫成多行,從第二行開始,必須有一個單空格縮進。換行符會被轉為空格。

轉為 JavaScript 如下。

多行字符串可以使用|保留換行符,也可以使用>摺疊換行。


this: |  Foo  Barthat: >  Foo  Bar

轉為 JavaScript 代碼如下。


{ this: 'Foo\nBar\n', that: 'Foo Bar\n' }

+表示保留文字塊末尾的換行,-表示刪除字符串末尾的換行。


s1: |  Foos2: |+  Foos3: |-  Foo

轉為 JavaScript 代碼如下。


{ s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' }

字符串之中可以插入 HTML 標記。


message: |  <p style="color: red">    段落  </p>

轉為 JavaScript 如下。


{ message: '\n<p style="color: red">\n  段落\n</p>\n' }

錨點&和別名*,可以用來引用。


defaults: &defaults;  adapter:  postgres  host:     localhostdevelopment:  database: myapp_development  <<: *defaultstest:  database: myapp_test  <<: *defaults

等同於下面的代碼。


defaults:  adapter:  postgres  host:     localhostdevelopment:  database: myapp_development  adapter:  postgres  host:     localhosttest:  database: myapp_test  adapter:  postgres  host:     localhost

&用來建立錨點(defaults),<<表示合併到當前數據,*用來引用錨點。

下面是另一個例子。


- &showell; Steve - Clark - Brian - Oren - *showell

轉為 JavaScript 代碼如下。


[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]

這是 JS-YAML(https://github.com/nodeca/js-yaml) 庫特有的功能,可以把函數和正則表達式轉為字符串。


# example.ymlfn: 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 對象還原到 yaml 文件的代碼如下。


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

YAML 1.2 規格(http://www.yaml.org/spec/1.2/spec.html)

YAML from Wikipedia(https://en.wikipedia.org/wiki/YAML)

YAML for Ruby(http://yaml.org/YAML_for_ruby.html)

(完)

Vanilla社區發起⦗晨讀計劃⦘,每天堅持積累一點,今天的努力至少讓我們比昨天更進一步。

⦗晨讀計劃⦘ 期待你的加入... ...

Vanilla:基於OpenResty的高性能Web應用開發框架    

我們的微信號:Vanilla-OpenResty

我們的QQ群:205773855、481213820、34782325

相關焦點

  • YAML語言教程
    YAML 是專門用來寫配置文件的語言,非常簡潔和強大,遠比 JSON 格式方便。本文介紹 YAML 的語法,以 JS-YAML 的實現為例。你可以去在線 Demo 驗證下面的例子。一、簡介YAML 語言(發音 /ˈjæməl/ )的設計目標,就是方便人類讀寫。它實質上是一種通用的數據串行化格式。
  • 【第1257期】YAML 語言教程
    YAML 是專門用來寫配置文件的語言,非常簡潔和強大,遠比 JSON 格式方便。本文介紹 YAML 的語法,以 JS-YAML:https://github.com/nodeca/js-yaml的實現為例。你可以去在線 Demo:http://nodeca.github.io/js-yaml/ 驗證下面的例子。
  • YAML:可能並不是那麼完美 | Linux 中國
    efi    home        lib64 mnt   proc  run  srv usr0許多其他語言(包括 Ruby 和 PHP 1 )默認情況下也不安全(LCTT 譯註:這裡應該說的是解析 yaml)。
  • [接口測試 - 基礎篇] 11 掌握下python解析YAML格式也是需要的
    什麼是YAMLYAML參考了其他多種語言,包括:XML、C語言、Python、Perl以及電子郵件格式RFC2822。 Clark Evans在2001年5月在首次發表了這種語言,另外Ingy döt Net與Oren Ben-Kiki也是這語言的共同設計者。
  • 如何快速成為一名優秀的YAML工程師?
    yaml工具pip3 install pyyamlpython3 -c 'import yaml, sys; yaml.safe_load(sys.stdin)' < demo.yamlYaml命令行內高亮顯示[2],可直接在Github上進行下載二進位文件
  • Python之UnitTest中yaml文件使用
    DDT數據驅動的使用,我們可以讀取txt文本文件來實現數據和代碼的分離,其實我們還可以使用今天要介紹的這種方式,那就是直接讀取yaml文件PyYaml的安裝pip install pyyamlPyYaml的簡單使用準備yaml數據,例如下面yaml文件編寫測試代碼,必須從ddt導入file_data執行結果展示
  • 英文教程太難啃?這裡有一份TensorFlow2.0中文教程
    近兩個月,網上已經出現了大量 TensorFlow 2.0 英文教程。在此文章中,機器之心為大家推薦一個持續更新的中文教程,以便大家學習。/tensorflow2_tutorials_chinese該教程是 NLP 愛好者 Doit 在知乎上開的一個專欄,由作者從 TensorFlow2.0 官方教程的個人學習復現筆記整理而來。
  • 我的世界essentials必要插件教程 essentials安裝法
    下面就給大家總結一下我的世界essentials必要插件教程。   我的世界essentials必要的插件中文教程:   玩家需要裝好的伺服器,有essentials插件在裡面和需要: notepad++。
  • Ruby 語言教程
    Ruby 是一種開源的面向對象程序設計的伺服器端腳本語言,在 20 世紀 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro
  • 教程|R語言學習與實踐教程
    我創建了R語言微信群,定位:R語言學習與實踐,要進群的朋友,添加我微信:luqin360。本文的外部連結,請點擊閱讀原文進入到數據人網後,就可以訪問和查看了。在這個內核中,我收集了我所寫的所有R語言教程,按級別劃分。初學者:在這個級別,我假設你沒有編程背景或剛剛開始使用R.
  • c語言入門教程
    這本書被 C語言開發者們稱為"K&R",很多年來被當作 C語言的非正式的標準說明。人們稱這個版本的 C語言為"K&R C"。  c語言宣傳圖1970到80年代,C語言被廣泛應用,從大型主機到小型微機,也衍生了C語言的很多不同版本。
  • Python語言教程算術運算與算術表達式的介紹
    Python語言教程算術運算與算術表達式的介紹 Python語言教程在算術運算符與算術的表達方式是我們值得學習的知識。下面我們就來詳細的看看Python語言教程中的相關信息。
  • 零基礎看得懂的C語言入門教程
    一、前言 距離上一次編寫C語言的教程是5年前了(2015年),由於自己是從初一時開始學習編程,深知學習編程的痛苦。當時正在念大學的我想著分享自己自學編程的經驗,搭建了一個社區(社區之後自己維護太懶,維護了一年不到關閉了)第一次編寫了C語言教程,分享自己的學習經驗。社區關閉後,於2017年上傳至了CSDN留存至今。 現在回過頭查看當時自己編寫的教程,由於當時技術的淺薄,編寫的教程還是存在很多的不足,故有了一個重新編寫C語言教程的想法。
  • 「語言實踐」Go語言文檔自動化之go-swagger
    Go 語言實踐為什麼需要文檔自動化?,以及維護,和自動化還有服務化而服務,用來描述API格式(通過一個而配置文件格式)或者API定義的語言。help介紹其中經常使用的命令有:swagger validate 用於對編寫的json或者yaml格式Spicification的檢查和校驗
  • 15個快速學習蘋果Swift程式語言的入門教程
    當然最主要還是市場炒的比較熱,加上官方Swift教程《The Swift Programming Language》在北航的大三學生發起在github上進行協同翻譯獲得了很高的人氣,短短幾天時間內《Swift中文版》第一版就發布。這真是不火不行了。Swift是蘋果公司在WWDC2014上發布的全新開發語言。
  • Telegram電報APP如何設置中文語言? Telegram電報APP語言設置教程
    Telegram電報APP如何設置中文語言? Telegram電報APP語言設置教程時間:2018-03-28 07:49   來源:皮皮網   責任編輯:沫朵 川北在線核心提示:原標題:Telegram電報APP如何設置中文語言?
  • 彙編語言入門教程
    ,即那些為人類設計的計算機語言。彙編語言就是低級語言,直接描述/控制 CPU 的運行。如果你想了解 CPU 到底幹了些什麼,以及代碼的運行步驟,就一定要學習彙編語言。彙編語言不容易學習,就連簡明扼要的介紹都很難找到。下面我嘗試寫一篇最好懂的彙編語言教程,解釋 CPU 如何執行代碼。
  • adobe audition怎麼設置中文 audition語言切換漢語圖文教程
    adobe audition怎麼設置中文 audition語言切換漢語圖文教程時間:2017-05-27 21:44   來源:綠茶軟體園   責任編輯:玲玲 川北在線核心提示:原標題:adobe audition怎麼設置中文 audition語言切換漢語圖文教程 adobe audition怎麼設置中文?
  • 蘋果最新程式語言Swift教程基礎入門手冊
    蘋果最新程式語言Swift教程基礎入門手冊 來源:www.18183.com作者:集落時間:2014-06-04 隨著蘋果最新程式語言Swift的發布,想必不少程序猿們都要出動了吧
  • 失落城堡中文怎麼設置 失落城堡中文語言設置教程
    導 讀 不少玩家都還不知道《失落城堡》怎麼調中文語言,由於遊戲默認是英文語言,作為英文苦手很是苦惱,今天小編就為大家分享失落城堡中文語言設置教程