YAML

司基礎平臺技術組整合了一套 cli 和相關工具,React Native、iOS、Android、Node、前端項目統一進行依賴管理、打包、提測、發佈等,項目工程中有 .yml 文件,不太瞭解作用,所以本文對其進行了解和學習。

一、 YAML 是什麼

YAML (a recursive acronym for “YAML Ain’t Markup Language”) is a human-readable data-serialization language. It is commonly used for configuration files and in applications where data is being stored or transmitted. YAML targets many of the same communications applications as Extensible Markup Language (XML) but has a minimal syntax which intentionally differs from SGML .[1] It uses both Python-style indentation to indicate nesting, and a more compact format that uses [] for lists and {} for maps[1] making YAML 1.2 a superset of JSON.[2] ~維基百科

編程難免需要寫配置文件,怎麼寫配置有很多種方式,XML、JSON、YAML…
YAML 是用來專門寫配置文件的語言,非常簡潔、強大,比 JSON 格式更簡潔。
YAML 是一種人類可讀的數據序列化語言,通常用於配置文件和用於存儲或傳輸數據的應用程序中。

基本語法:

  • 大小寫敏感
  • 使用縮進表示層級關係
  • 縮進時不允許使用 Tab 鍵,只允許使用空格鍵
  • 縮進的空格數目不重要,只要相同層級的元素左側對齊即可

# 表示註釋,從這個字符串開始到這一行結束,都會被解析器認爲是註釋而忽略

YAML 支持3種數據結構

  • 對象:鍵值對的集合,又稱爲映射(mapping)、哈希(hashes)、字典(dictionary)
  • 數組:一組按次序排列的值,又稱爲序列(sequence)/列表(list)
  • 純量:單個的、不可再分的值

二、對象

對象:一組鍵值對,用冒號結構表示

hobby: coding

轉換爲 Javascript

{ hobby: 'coding' }

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

person: { age: 24, hobby: coding, title: 資深工程師 }

轉換爲 Javascript

{ person: { age: 24, hobby: 'coding', title: '資深工程師' } }

三、數組

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

- movie
- coding
- music
- bicycle

轉換爲 Javascript

[ 'movie', 'coding', 'music', 'bicycle' ]

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

- music
- coding
 - swift
 - Javascript
 - shell
 - php
 - ruby
 - python
- cat
- movie

轉換爲 Javascript

['music', ['swift', 'Javascript', 'shell', 'php', 'ruby', 'python'], 'cat', 'movie']

數組也可以用行內表示法

coding: [swift, Javascript, shell, php, ruby, python]

轉換爲 Javascript

{ coding: ['swift', 'Javascript', 'shell', 'php', 'ruby', 'python']}

四、複合結構

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

hobby:
 - coding
 - music
 - movie
 - bicycle
skills:
 swift: iOS
 ruby: cocoapod
 php: server
 python: spider

轉換爲 Javascript

{ 
    hobby: ['coding', 'music', 'movie', 'bicycle'], 
    skills: {
        swift: 'iOS',
        ruby: 'cocoapod',
        php: 'server',
        python: 'spider'
    }
}

五、純量

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

  • 字符串
  • 布爾值
  • null
  • 整數
  • 浮點數
  • 日期
  • 時間

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

number: 12.30

轉換爲 Javascript

{ number: 12.30}

布爾值用 true 和 false 表示

isDeveloper: true

轉換爲 Javascript

{ isDeveloper: true}

null 用 ~ 表示

pet: ~

轉換爲 Javascript

{ pet: null }

時間採用 ISO8601 格式

iso8601: 2019-11-27-14t21:59:43.10-05:00

轉換爲 Javascript

{ iso8601: new Date('2019-11-27-14t21:59:43.10-05:00') }

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

age: !!str 24
isDeveloper: !!str true

轉換爲 Javascript

{ age: '24', isDeveloper: 'true' }

六、字符串

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

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

str: 這是一行字符串

轉換爲 Javascript

{ str: '這是一行字符串' }

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

str: '內容: 字符串'

轉換爲 Javascript

{ str: '內容: 字符串' }

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

s1: '姓名\n杭城小劉'
s2: "姓名\n杭城小劉"

轉換爲 Javascript

{ s1: "姓名\\n杭城小劉", s2: "姓名\n杭城小劉" }

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

str: 'labor''s day'

轉換爲 Javascript

{ s1: "labor's day" }

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

str: 這是第一段
 多行
 字符串

轉換爲 Javascript

{ str: "這是第一段 多行 字符串" }

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

this: |
 Foo
 Bar
that: >
 Foo
 Bar

轉換爲 Javascript

{ this: "Foo\nBar\n", that: "Foo Bar\n" }
  • 表示保留文字末尾的換行,- 表示刪除字符串末尾的換行
name: |
 LBP
hobby: |+
 Coding
 Movie


sports: |-
 Bicycle

轉換爲 Javascript

{ name: "LBP\n", hobby: "Coding\nMovie\n\n\n", sports: "Bicycle" }

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

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

轉換爲 Javascript

{message: "\n <p style="color:red">\n yaml\n</p>\n"}

七、引用

錨點 & 和別名 * 用來表示引用

engineer: &engineer
 name: 杭城小劉
 age: 24
 title: 資深工程師
iOSer:
 kind: iOS
 <<: *engineer

等同於下面的 yml 代碼

engineer: 
 name: 杭城小劉
 age: 24
 title: 資深工程師
iOSer:
 kind: iOS
 name: 杭城小劉
 age: 24
 title: 資深工程師

其中: << 表示合併到當前數據,& 用來建立錨點, * 用來表示引用錨點。

其他

  1. 有個 NodeJS 庫可以將 YAML 函數和正則轉換爲 JS 對象。反過來也可以
  2. Ruby 可以將 YAML 轉換爲 Ruby,反過來也可以

參考鏈接:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章