YAML學習
一:什麼是YAML?
YAML是專門用來寫配置檔案的語言,通過它來編寫完成後,我們可以通過外掛JS-YAML(https://github.com/nodeca/js-yaml) 來轉換成我們的json資料。
二:有如下基本語法規則:
1 大小寫敏感
2 使用縮排表示層級關係
3 縮排時相同層級的元素左側對齊即可
4 使用 "#" 來表示註釋。
支援的資料格式如下:
1. 物件:鍵值對的集合。
2. 陣列:
3. 純量;單個的,不可再分的值
2.1 物件
物件是由一組鍵值對組成,是使用冒號結構來表示;如下:
name: kongzhi
它會被轉為如下的json資料:
{ name: 'kongzhi' }
假如我現在的專案目錄如下結構:
### 目錄結構如下: demo # 工程名 | |--- index.js | |--- index.yaml | |--- package.json
index.yaml 程式碼如下:
name: kongzhi
index.js 程式碼如下:
const yaml = require('js-yaml'); const fs = require('fs'); const doc = yaml.safeLoad(fs.readFileSync('./index.yaml', 'utf-8')); console.log(doc);
執行命令 node index.js 就可以列印出
{ name: 'kongzhi' }
YAML也允許如下寫法,將所有鍵值對寫成一個行內物件;如下:
obj: { name: kongzhi, age: 30 }
轉為js就變成如下:
{ obj: { name: 'kongzhi', age: 30 } }
2.2 陣列:
一組以橫線開頭的行,構成一個陣列。 如下程式碼:
- kongzhi - longen - tugenhua
轉為js變為如下:
[ 'kongzhi', 'longen', 'tugenhua' ]
巢狀陣列:
對陣列可以巢狀陣列,比如 [['kongzhi', 'longen', 'tugenhua']] 這樣的。可以如下程式碼:
- - kongzhi - longen - tugenhua
物件巢狀陣列:
比如如下程式碼:
obj: - kongzhi - longen - tugenhua
就會轉為為成:
{ obj: [ 'kongzhi', 'longen', 'tugenhua' ] }
這樣的。
陣列也可以巢狀物件, 比如如下這樣的:
-
{ name: kongzhi, age: 30 }
或
-
name: kongzhi
age: 30
轉為js,變為如下:
[ { name: 'kongzhi', age: 30 } ]
如果多個陣列的話,如下這種寫法是可以的;
[
{ name: kongzhi, age: 30 },
{ name: kongzhi, age: 30 }
]
或者如下這樣的:
- name: kongzhi - name: longen0707 - name: tugenhua
就會轉化成如下這樣的:
[ { name: 'kongzhi' }, { name: 'longen0707' }, { name: 'tugenhua' } ]
2.3 純量
純量是最基本的,不可再分的值,以下資料型別都屬於javascript的純量。
字串,布林型,整數,浮點數,Null, 時間, 日期等
1. 字串
字串預設不使用引號表示。如下:
str: 空智
轉為js變為如下:
{ str: '空智' }
但是如果字串中包含空格或特殊字元,需要使用引號;如下所示:
str: '空智: 123'
轉為js變為如下:
{ str: '空智: 123' }
如果不使用引號就會報錯的。
單引號中如果還有單引號,需要使用單引號進行轉義,比如:
name: I am Tom's
需要寫成如下:
name: 'I am Tom''s'
最後會轉成 如下這樣的:
{ name: 'I am Tom\'s' }
字串也可以寫成多行,從第二行開始,必須有一個單空格縮排,換行符會轉換為空格。如下:
name: 這是一段
多行
字串
轉換成js變為如下:
{ name: '這是一段 多行 字串' }
保留換行符 和 摺疊換行
多行字串可以使用 | 保留換行符,使用 > 摺疊換行;如下程式碼:
name: | kongzhi longen0707 age: > kongzhi longen0707
轉為js變為如下:
{ name: 'kongzhi\nlongen0707\n', age: 'kongzhi longen0707\n' }
+ 表示保留文字塊末尾的換行,- 表示刪除字串末尾的換行
如下程式碼:
name1: | kongzhi name2: |+ longen0707 name3: |- tugenhua
轉為js變為如下:
{ name1: 'kongzhi\n', name2: 'longen0707\n\n\n\n', name3: 'tugenhua' }
字串中插入HTML標記
如下程式碼:
name: |
<div style="color:blue">
xxx
</div>
轉為js變為如下:
{ name: '<div style="color:blue">\n xxx\n</div>\n' }
2. 布林型:
布林值是使用true和false表示;如下程式碼:
isFlag: false
轉換成js變為如下:
{ isFlag: false }
其中 null 使用 ~ 表示; 如下程式碼:
obj: ~
轉為js變為如下:
{ obj: null }
3. 引用
錨點 & 和 別名 *, 可以用來引用,& 是用來建立錨點,<< 表示合併到當前資料,* 是用來引用錨點。 如下程式碼:
objects: &objects name: kongzhi age: 30 object2: name: longen0707 <<: *objects object3: name: tugenhua <<: *objects
轉換為js變為如下:
{ objects: { name: 'kongzhi', age: 30 }, object2: { name: 'longen0707', age: 30 }, object3: { name: 'tugenhua', age: 30 } }
詳情demo 請看 http://nodeca.github.io/js-yaml/