yaml 解決問題

yaml 是什么?

在 github 一些開源項目里經常可以看到 .travis.yml 文件,后來接觸持續集成這個概念時發現很多文件都是 .yml 后綴的文件。我在 阮一峰-YAML 語言教程 里了解了它的作用以及基本寫法,他的那篇文章描述的略微有點啰嗦,實際看到的大多數配置文件還是及其簡單的,而我們要做的是能讀懂它們,就像讀懂 .json 一樣。

yaml 語言(或者說是一種規范吧)可以編寫 .yml 文件,和 json 一樣是配置文件。也許是有人認為 json 的寫法不爽,于是乎發明了這玩意,通過下面的例子,可以看到 yaml 寫的配置文件確實要比 json 方便很多。

編寫規則

  • 大小寫敏感

json 里也是大小寫敏感的,這點二者一樣。

  • 使用縮進表示層級關系

json 中使用 {} 的嵌套表示層級,而 yaml 使用縮進,后者更方便一些。

  • # 表示注釋

json 文件中不允許寫注釋,對于很長配置文件全靠字面意思猜挺痛快的,yaml 可以寫注釋,:100:

數據結構

配置文件理應十分簡潔,與 json 相比,不用頻繁的寫 {}[],畢竟換行和 - 符號更加簡潔,字符串也不需要頻繁的加引號(無論是單引號還是雙引號)。

對象

# conf.yml
animal: pets
hash: { name: Steve, foo: bar }

轉換為 json 為:

{{ "animal": "pets" },{ "hash": { "name": "Steve", "foo": "bar" } }
}

數組

# conf.yml
Animal:- Cat- Dog- Goldfish

轉換為 json 為:

{ "Animal": [ "Cat", "Dog", "Goldfish" ] }

字符串

# conf.yml
# 正常情況下字符串不用寫引號
str: 這是一行字符串
# 字符串內有空格或者特殊字符時需要加引號
str: '內容: 字符串'

null

# conf.yml
parent: ~

.yml 中 ~ 表示 null,轉換為 json 為:

{ "parent": null }

1. 認識 YAML

  YAML是一個類似 XML、JSON 的標記性語言。YAML 強調以數據為中心,并不是以標識語言為重點。因而 YAML 本身的定義比較簡單,號稱“一種人性化的數據格式語言”。

1.1 YAML 的設計目標:

人類容易閱讀

可用于不同程序間的數據交換

適合描述程序所使用的數據結構,特別是腳本語言

豐富的表達能力與可擴展性

易于使用

1.2 YAML 與 XML、JSON

YAML 與 XML

具有 XML 同樣的優點,但比 XML 更加簡單、敏捷等

YAML 與 JSON

JSON 可以看作是 YAML 的子集,也就是說 JSON 能夠做的事情,YAML 也能夠做

YAML 能表示得比 JSON 更加簡單和閱讀,例如“字符串不需要引號”。所以 YAML 容易可以寫成 JSON 的格式,但并不建議這種做

YAML 能夠描述比 JSON 更加復雜的結構,例如“關系錨點”可以表示數據引用(如重復數據的引用)。

1.3 YAML 組織結構

  YAML 文件可以由一或多個文檔組成(也即相對獨立的組織結構組成),文檔間使用“---”(三個橫線)在每文檔開始作為分隔符。同時,文檔也可以使用“...”(三個點號)作為結束符(可選)。如下圖所示:

如果只是單個文檔,分隔符“---”可省略。

每個文檔并不需要使用結束符“...”來表示結束,但是對于網絡傳輸或者流來說,作為明確結束的符號,有利于軟件處理。(例如不需要知道流關閉就能知道文檔結束) <br/>

  YAML 認為數據由以下三種結構組成:(每個文檔由三種結構混合組成)

標量 (相當于數據類型)

序列 (相當于數組和列表)

鍵值表(相當于 Map 表)

2. YAML 編寫規范

規范一:文檔使用 Unicode 編碼作為字符標準編碼,例如 UTF-8

規范二:使用“#”來表示注釋內容

# 客戶訂單

date: 2015-02-01

customer:

? - name: Jai

items:

? - no: 1234 ? ? ? ? # 訂單號

? - descript: cpu

規范三:使用空格作為嵌套縮進工具。通常建議使用兩個空格縮進,不建議使用 tab (甚至不支持)

規范四:序列表示

使用“-”(橫線) + 單個空格表示單個列表項

--- # 文檔開始

- 第一章 簡介

- 第二章 設計目錄

使用"[]"表示一組數據

--- # 文檔開始

[blue, red, green]

組合表示。每個結構都可以嵌套組成復雜的表示結構。

--- # 文檔開始

- [blue, red, green] ? ? # 列表項本身也是一個列表

- [Age, Bag]

- site: {osc:www.oschina.net, baidu: www.baidu.com} ?# 這里是同 鍵值表 組合表示

規范五:鍵值表

使用 “:”(冒號) + 空格表示單個鍵值對

# 客戶訂單

date: 2015-02-01

customer:

? - name: Jai

items:

? - no: 1234 ? ? ? ? # 訂單號

? - descript: cpu

? - price: ¥800.00

使用"{}"表示一個鍵值表

# 客戶訂單

date: 2015-02-01

customer:

? - name: Jai

items: {no: 1234, descript: cpu, price: ¥800.00}

"? " 問號+空格表示復雜的鍵。當鍵是一個列表或鍵值表時,就需要使用本符號來標記。

?# 使用一個列表作為鍵

?? [blue, reg, green]: Color

?# 等價于

?? - blue

? ?- reg

? ?- gree

?: Color

組合表示。每個結構都可以嵌套組成復雜的表示結構。?

?Color:

? ? - blue

? ? - red

? ? - green

?

?# 相當于 (也是 JSON 的表示)

?{Color: [blue, red, green]}

?div:

? ? - border: {color: red, width: 2px}

? ? - background: {color: green}

? ? - padding: [0, 10px, 0, 10px]

?# 使用縮進表示的鍵值表與列表項

?items:

? ? - item: cpu

? ? ? model: i3

? ? ? price: ¥800.00

? ? - item: HD

? ? ? model: WD

? ? ? price: ¥450.00

?# 上面使用 “-” 前導與縮進來表示多個列表項,相當于下面的JSON表示

?items: [{item:cpu, model:i3, price:¥800.00}, {item:HD, model:WD, price: ¥450.00}]

規范六:文本塊

使用 “|” 和文本內容縮進表示的塊:保留塊中已有的回車換行。相當于段落塊

yaml: | ? ? ?# 注意 ":" 與 "|" 之間的空格

? ?JSON的語法其實是YAML的子集,大部分的JSON文件都可以被YAML的解釋器解釋。

? ?如果你想更深入的學習YAML,我建議你去 http://www.yaml.org 看看

使用 “>” 和文本內容縮進表示的塊:將塊中回車替換為空格,最終連接成一行。

yaml: > ? ? ?# 注意 ":" 與 ">" 之間的空格,另外可以使用空行來分段落

? ?JSON的語法其實是YAML的子集,

? ?大部分的JSON文件都可以被YAML的解釋器解釋。

? ?如果你想更深入的學習YAML,我建議你去 http://www.yaml.org 看看

使用定界符“”(雙引號)、‘’(單引號)或回車表示的塊:最終表示成一行。

yaml: ? ? # 使用回車的多行,最終連接成一行。

? ?JSON的語法其實是YAML的子集,

? ?大部分的JSON文件都可以被YAML的解釋器解釋。

yaml: ? ? # 使用了雙引號,雙引號的好處是可以轉義,即在里面可以使用特殊符號

? ?"JSON的語法其實是YAML的子集,

? ?大部分的JSON文件都可以被YAML的解釋器解釋。"

規范七:數據類型的約定

對一些常用數據類型的表示格式進行了約定,包括:

?integer: 12345 ? ? # 整數標準形式

?octal: 0o34 ? ? ? ?# 八進制表示,第二個是字母 o

?hex: 0xFF ? ? ? ? ?# 十六進制表示

?

?float: 1.23e+3 ? ? # 浮點數

?fixed: 13.67 ? ? ? # 固定小數

?minmin: -.inf ? ? ?# 表示負無窮

?notNumber: .NaN ? ?# 無效數字

?

?null: ? ? ? ? ? ? ?# 空值

?boolean: [true, false] # 布爾值

?string: ‘12345‘ ? ?# 字符串

?

?date: 2015-08-23 ? # 日期

?datetime: 2015-08-23T02:02:00.1z ?# 日期時間

?iso8601: 2015-08-23t21:59:43.10-05:00 ?# iso8601 日期格式

?spaced: 2015-08-23 21:59:43.10 -5 ? ? ?# ?

“!”(嘆號)顯式指示類型,或自定義類型標識。單嘆號通常是自定義類型,雙嘆號是內置類型

?isString: !!str 2015-08-23 ? ? # 強調是字符串不是日期數據

?picture: !!binary | ? ? ? ? ? ?# Base64 ?圖片

? ? ?R0lGODlhDAAMAIQAAP//9/X

? ? ?17unp5WZmZgAAAOfn515eXv

? ? ?Pz7Y6OjuDg4J+fn5OTk6enp

? ? ?56enmleECcgggoBADs=

?#下面是內置類型

?!!int ? ? ? ? ? ? ? # 整數類型

?!!float ? ? ? ? ? ? # 浮點類型

?!!bool ? ? ? ? ? ? ?# 布爾類型

?!!str ? ? ? ? ? ? ? # 字符串類型

?!!binary ? ? ? ? ? ?# 也是字符串類型

?!!timestamp ? ? ? ? # 日期時間類型

?!!null ? ? ? ? ? ? ?# 空值

?!!set ? ? ? ? ? ? ? # 集合

?!!omap, !!pairs ? ? # 鍵值列表或對象列表

?!!seq ? ? ? ? ? ? ? # 序列,也是列表

?!!map ? ? ? ? ? ? ? # 鍵值表

?#下面是一些例子:

?--- !!omap

?- Mark: 65

?- Sammy: 63

?- Key: 58

?--- !!set ? ? ? ? ? # 注意,“?”表示鍵為列表,在這里列表為 null

?? Mark

?? Sammy

?? Key

?# 下面是自定義的類型或標識

?%TAG ! tag:clarkevans.com,2002: ? # % 是指令符號

?--- !shape

?# Use the ! handle for presenting

?# tag:clarkevans.com,2002:circle

?- !circle

? ?center: &ORIGIN {x: 73, y: 129}

? ?radius: 7

?- !line

? ?start: *ORIGIN

? ?finish: { x: 89, y: 102 }

?- !label

? ?start: *ORIGIN

? ?color: 0xFFEEBB

? ?text: Pretty vector drawing.

規范八:錨點與引用,定義數據的復用。

第一步:使用 “&” 定義數據錨點(即要復制的數據)

第二步:使用 “*” 引用上述錨點數據(即數據的復制目的地)

?---

?hr:

? ?- Mark McGwire

? ?# Following node labeled SS

? ?- &SS Sammy Sosa ? ? ? ? ? ?# 定義要復制的數據

?rbi:

? ?- *SS # Subsequent occurrence ? 這里是數據復制目標

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457113.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457113.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457113.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2016 7 25 鏈表

1 #include<stdio.h>2 #include<stdlib.h>3 /* 4 usingnamespacestd;5 6 structNode7 {8 int data;//數據域9 struct Node*next;//指針域10 };11 12 /*13 Create14 *函數功能&#xff1a;創建鏈表.15 *輸入&#xff1a;各節點的data16 *返回值&#xff1a;指…

php數值操作,php數值計算num類簡單操作示例

php數值計算num類簡單操作示例,在線,計算器,小數,整數,程序設計php數值計算num類簡單操作示例易采站長站&#xff0c;站長之家為您整理了php數值計算num類簡單操作示例的相關內容。本文實例講述了php數值計算num類簡單操作。分享給大家供大家參考&#xff0c;具體如下&#xff…

YAML-學習筆記!

YAML學習筆記 一、YAML簡介 YAML&#xff0c;即YAML Ain’t Markup Language的縮寫&#xff0c;YAML 是一種簡潔的非標記語言。YAML以數據為中心&#xff0c;使用空白&#xff0c;縮進&#xff0c;分行組織數據&#xff0c;從而使得表示更加簡潔易讀。 二、YAML語法 1、基本規…

CentOS遠程監控

近日&#xff0c;因工作需要&#xff0c;學習了CentOS遠程監控的水平有限&#xff0c;多指教。 遠程訪問CentOS&#xff0c;包括三種方式ssh&#xff0c;telnet&#xff0c;vnc。 本例涉及的是以vnc遠程訪問CentOS。指令在root下操作。注意&#xff1a;vnc的端口為5900&#xf…

aix oracle 10.2.0.1 升級 10.2.0.4,AIX Oracle RAC 升級到10.2.0.4.0要特別注意的問題 - 愛肯的專欄 ......

AIX Oracle RAC 升級到10.2.0.4.0過程有如下報錯(直接升級到10.2.0.4不需要應用Patch:6160398)&#xff1a;rootbwgl_db2:/u01/app/oracle/crs_1/bin# /u01/app/oracle/crs_1/install/root102.shError : Please change the CRS_ORACLE_USER id to have the following OS capabi…

將文件提交到github的兩種方法

方法一 簡要步驟如下&#xff1a; 登陸github&#xff0c;創建git倉庫。記此git倉庫的地址為[github_repository_url]&#xff0c;例如git倉庫的地址&#xff1a;https://github.com/galian123/nodejs_http_server 在本地的工程目錄執行git init&#xff0c;此工程目錄是要提…

Visual Studio 2017新版發布,極大提高開發效率丨附下載

最新的Visual Studio 2017免費下載&#xff1a;https://www.evget.com/product...【包含Professional、Enterprise、Community版本】 為任何開發、應用和平臺提供無與倫比的效率&#xff0c;Visual Studio 2017 候選發布。 提高了效率 代碼導航、IntelliSense、重構、代碼修復和…

BGP路由協議詳解(完整篇)

原文鏈接&#xff1a;http://xuanbo.blog.51cto.com/499334/465596/ 2010-12-27 12:02:45 上個月我寫一篇關于BGP協議的博文&#xff0c;曾許諾過要完善這個文檔&#xff0c;但因最近的工作和授課很忙&#xff0c;所以沒有時間進行完善。為了實現這個承諾&#xff0c;我在去外…

oracle 備份導出,oracle 怎么備份或導入導出表

exp/imp下面介紹的是導入導出的實例&#xff0c;向導入導出看實例基本上就可以完成&#xff0c;因為導入導出很簡單。數據導出&#xff1a;1 將數據庫TEST完全導出,用戶名system 密碼manager 導出到D:\daochu.dmp中exp system/managerTEST filed:\daochu.dmp fully2 將數據庫中…

GitHub+Hexo搭建自己的Blog之-本地環境部署01

前言 之前我的博客沒有綁自己的域名&#xff0c;一直在github上放著&#xff0c;訪問起來比較麻煩&#xff0c;前陣子在阿里云買了這個域名&#xff0c;配置上之后&#xff0c;就可以通過自己的域名訪問了&#xff0c;有些朋友問我這個博客怎么搭的&#xff0c;用的什么主題&am…

appsettings 連接oracle數據庫,ABP .net core集成訪問Oracle數據庫

1.添加包引用&#xff1a;Microsoft.EntityFrameworkCore.RelationalOracle.EntityFrameworkCore2.重寫DbContext OnModelCreating/// /// 判斷如果是Oracle&#xff0c;需要執行Schema/// /// protected override void OnModelCreating(ModelBuilder modelBuilder){//判斷當前…

Day08-函數(3)

import functools #偏函數 def demo(a,b,c,d):print(a,b,c,d)# def partital_demo(a,b): # demo(a,b,3,4) # partital_demo(1,2)#實現偏函數 # #固定前兩個 # demo functools.partial(demo,5,6) # demo(10,50)# #固定后兩個 # demofunctools.partial(demo,c3,d5) # demo(1…

使用VS2010編譯Qt 5.6.1過程記錄

由于Qt官方發布的Qt 5.6.1二進制安裝包沒有對應VS2010版本的&#xff0c;而我的電腦上只安裝了VS2010&#xff0c;因此只能自己編譯。 本文記錄本人的編譯安裝過程&#xff0c;以及其中遇到的一些問題。 本文使用VS2010 32位編譯Qt 5.6.1。 1. 下載Qt源代碼 Qt源代碼下載地址&…

golang 指針

指針1、簡單的定義一個指針package mainimport "fmt"func main(){var p *inti :2p &ifmt.Println("memory address i:",p) } //執行結果&#xff1a; memory address i: 0xc42000a2e02、打印指針的值package mainimport "fmt"func main(){v…

php防錯處理,更好的PHP錯誤處理

錯誤類型PHP 主要有兩種錯誤&#xff1a;觸發錯誤和異常。其中觸發錯誤大概可以分為&#xff1a;編譯錯誤、引擎錯誤和運行時錯誤&#xff0c;其中前兩個是無法捕獲的&#xff1b;異常都是可以捕獲的&#xff0c;當沒有嘗試捕獲時則會中斷代碼。觸發錯誤可以通過 error_get_las…

Windows安裝Apache注冊服務出現(OS 5)拒絕訪問。 : AH00369: Failed to open the Windows service manager,

windows安裝Apache&#xff0c;注冊服務出現“(OS 5)拒絕訪問。 : AH00369: Failed to open the WinNT service manager..."錯誤 在安裝Apache的時候&#xff0c;我下載的是zip格式&#xff0c;不是msi安裝版&#xff0c;需要自己注冊服務&#xff0c;才能在桌面任務欄里有…

算法與數據結構(三) 二叉樹的遍歷及其線索化(Swift版)

前面兩篇博客介紹了線性表的順序存儲與鏈式存儲以及對應的操作&#xff0c;并且還聊了棧與隊列的相關內容。本篇博客我們就繼續聊數據結構的相關東西&#xff0c;并且所涉及的相關Demo依然使用面向對象語言Swift來表示。本篇博客我們就來介紹樹結構的一種&#xff1a;二叉樹。在…

關于android開發時,發生Error infalting classa com.baidu.mapapi.map.MapView的解決辦法

1.問題描述&#xff1a;百度地圖SDK中 Error&#xff1a; infalting classa com.baidu.mapapi.map.MapView 。 2.解決辦法&#xff1a;通過1個多小時的上網搜索&#xff0c;最終發現很多網友之所以出現這方面的問題有以下幾種原因&#xff1a; &#xff08;1&#xff09;.忘…

c++動態綁定的技術實現

1 什么是動態綁定 有一個基類&#xff0c;兩個派生類&#xff0c;基類有一個virtual函數&#xff0c;兩個派生類都覆蓋了這個虛函數。現在有一個基類的指針或者引用&#xff0c;當該基類指針或者引用指向不同的派生類對象時&#xff0c;調用該虛函數&#xff0c;那么最終調用的…

linux替換某個文件夾下所有文件,Linux 批量查找并替換文件夾下所有文件的內容...

1.批量查找某個目下文件的包含的內容cd etcgrep -rn "查找的內容" ./2.批量替換某個目下所有包含的文件的內容cd etcsed -i "s/查找的內容/替換后的內容/g" grep -rl "查找的內容" ./3.批量查找并替換任意文件夾下的文件內容。sed -i "s/要…