YAML語法簡(jiǎn)易入門

YAML 語法

個(gè)人感覺這篇文檔屬于"搬運(yùn)工"性質(zhì)

可以查看官方或者其他的博客資料,會(huì)有一大堆的內(nèi)容

YAML語言的設(shè)計(jì)參考了JSON,XML和SDL等語言渣玲。YAML 強(qiáng)調(diào)以數(shù)據(jù)為中心,簡(jiǎn)潔易讀,編寫簡(jiǎn)單箱舞。

有意思的命名:

AML全稱是”YAML Ain’t a Markup Language”(YAML不是一種置標(biāo)語言)的遞歸縮寫。
在開發(fā)的這種語言時(shí)羽峰,YAML 的意思其實(shí)是:”Yet Another Markup Language”(仍是一種置標(biāo)語言)限寞。

語法特點(diǎn)

  • 大小寫敏感
  • 通過縮進(jìn)表示層級(jí)關(guān)系
  • 禁止使用tab縮進(jìn)履植,只能使用空格鍵 (個(gè)人感覺這條最重要)
  • 縮進(jìn)的空格數(shù)目不重要玫霎,只要相同層級(jí)左對(duì)齊即可
  • 使用#表示注釋

支持的數(shù)據(jù)結(jié)構(gòu)

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

雙引號(hào)和單引號(hào)的區(qū)分

雙引號(hào)"":不會(huì)轉(zhuǎn)義字符串里面的特殊字符投队,特殊字符作為本身想表示的意思爵川。

name: "123\n123"
---------------------------
輸出: 123 換行 123

如果不加引號(hào)將會(huì)轉(zhuǎn)義特殊字符,當(dāng)成字符串處理

值的寫法

1.字符串

使用”或”“或不使用引號(hào)

value0: 'hello World!'
value1: "hello World!"
value2: hello World!

2.布爾值

truefalse表示扒披。

3.數(shù)字

12 #整數(shù) 
014 # 八進(jìn)制整數(shù) 
0xC #十六進(jìn)制整數(shù) 
13.4 #浮點(diǎn)數(shù) 
1.2e+34 #指數(shù) 
.inf空值 #無窮大

4.空值

null~表示

5.日期

使用 iso-8601 標(biāo)準(zhǔn)表示日期

date: 2018-01-01t16:59:43.10-05:00

在springboot中yaml文件的時(shí)間格式 date: yyyy/MM/dd HH:mm:ss

6.強(qiáng)制類型轉(zhuǎn)換(了解)

YAML 允許使用個(gè)感嘆號(hào)!谎碍,強(qiáng)制轉(zhuǎn)換數(shù)據(jù)類型洞焙,單嘆號(hào)通常是自定義類型拯啦,雙嘆號(hào)是內(nèi)置類型褒链。

money: !!str
123
date: !Boolean
true

內(nèi)置類型列表

!!int # 整數(shù)類型 
!!float # 浮點(diǎn)類型 
!!bool # 布爾類型 
!!str # 字符串類型 
!!binary # 也是字符串類型 
!!timestamp # 日期時(shí)間類型 
!!null # 空值 
!!set # 集合 
!!omap,!!pairs # 鍵值列表或?qū)ο罅斜?!!seq # 序列,也是列表 !!map # 鍵值表

7.對(duì)象(重點(diǎn))

Map(屬性和值)(鍵值對(duì))的形式:
key:(空格)v :表示一堆鍵值對(duì)兵迅,空格不可省略恍箭。

car:
    color: red
    brand: BMW

一行寫法

car:{color: red扯夭,brand: BMW}

相當(dāng)于JSON格式:

{"color":"red","brand":"BMW"}

8.數(shù)組

一組連詞線開頭的行交洗,構(gòu)成一個(gè)數(shù)組橡淑。

brand:
   - audi
   - bmw
   - ferrari

一行寫法

brand: [audi,bmw,ferrari]

相當(dāng)于JSON

["auri","bmw","ferrari"]

9.文本塊

|:使用|標(biāo)注的文本內(nèi)容縮進(jìn)表示的塊梁棠,可以保留塊中已有的回車換行

value: |
   hello
   world!
輸出結(jié)果:hello 換行 world置森!

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

value: |
hello

value: |-
hello

value: |+
hello
輸出:hello\n hello hello\n\n(有多少個(gè)回車就有多少個(gè)\n)

注意 “|” 與 文本之間須另起一行

>:使用 > 標(biāo)注的文本內(nèi)容縮進(jìn)表示的塊蜜笤,將塊中回車替換為空格,最終連接成一行

value: > hello
world!
輸出:hello 空格 world把兔!

注意 “>” 與 文本之間的空格

10.錨點(diǎn)與引用

使用 & 定義數(shù)據(jù)錨點(diǎn)(即要復(fù)制的數(shù)據(jù))沪伙,使用 * 引用錨點(diǎn)數(shù)據(jù)(即數(shù)據(jù)的復(fù)制目的地)

name: &a yaml
book: *a
books: 
   - java
   - *a
   - python
輸出book: yaml 
輸出books:[java,yaml,python]

注意*引用部分不能追加內(nèi)容


配置文件注入數(shù)據(jù)

/**
 * 將配置文件中配置的每一個(gè)屬性的值县好,映射到這個(gè)組件中
 * @ConfigurationProperties:告訴SpringBoot將本類中的所有屬性和配置文件中相關(guān)的配置進(jìn)行綁定围橡;
 *      prefix = "person":配置文件中哪個(gè)下面的所有屬性進(jìn)行一一映射
 *
 * 只有這個(gè)組件是容器中的組件,才能容器提供的@ConfigurationProperties功能缕贡;
 *
 */
@Component //實(shí)例化
@ConfigurationProperties(prefix = "person")//yaml或者properties的前綴
public class Person {

    private String name;
    private Integer age;
    private Boolean flag;
    private Date birthday;
    private Map<String,Object> maps;
    private List<Object> tempList;
    private Dog dog;
    //省略getter和setter以及toString方法

我們可以導(dǎo)入配置文件處理器拣播,以后編寫配置就有提示了贮配,@ConfigurationPropertiesIDE會(huì)提示打開在線的幫助文檔泪勒,配置依賴如下:

<!--導(dǎo)入配置文件處理器圆存,配置文件進(jìn)行綁定就會(huì)有提示-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

application.yaml文件

person:
  name: 胖先森
  age: 18
  flag: false
  birthday: 2018/12/19 20:21:22 #Spring Boot中時(shí)間格式
  maps: {bookName: "西游記",author: '吳承恩'}
  tempList:
    - 紅樓夢(mèng)
    - 三國(guó)演義
    - 水滸傳
  dog:
    dogName: 大黃
    dogAge: 4

在test中進(jìn)行測(cè)試如下


@RunWith(SpringRunner.class)
@SpringBootTest
public class Demo03BootApplicationTests {

    @Autowired
    private Person p1;

    @Test
    public void contextLoads() {
        System.out.println(p1);
    }

}

輸出結(jié)果為:Person{name='胖先森', age=18, flag=false, birthday=Wed Dec 19 20:21:22 CST 2018, maps={bookName=西游記, author=吳承恩}, tempList=[紅樓夢(mèng), 三國(guó)演義, 水滸傳], dog=Dog{dogName='大黃', dogAge=4}}

application.properties文件

person123.name=劉備
person123.age=20
person123.birthday=2018/12/19 20:21:22
person123.maps.bookName=水滸傳
person123.maps.author=羅貫中
person123.temp-list=一步教育,步步為贏
person123.dog.dogName=小白
person123.dog.dogAge=5

java代碼修改前綴

@Component //實(shí)例化
@ConfigurationProperties(prefix = "person123")//yaml或者properties的前綴
public class Person {

    private String name;
    private Integer age;
    private Boolean flag;
    private Date birthday;
    private Map<String,Object> maps;
    private List<Object> tempList;
    private Dog dog;
    //省略getter和setter以及toString方法

在test中進(jìn)行測(cè)試如下

@RunWith(SpringRunner.class)
@SpringBootTest
public class Demo03BootApplicationTests {

    @Autowired
    private Person p1;

    @Test
    public void contextLoads() {
        System.out.println(p1);
    }

}

輸出結(jié)果為:Person{name='????????????', age=20, flag=null, birthday=Wed Dec 19 20:21:22 CST 2018, maps={bookName=???°′???, author=???T1?????????}, tempList=[ò???????????????????, ?????????????aó?], dog=Dog{dogName='D???????', dogAge=5}}

屬性文件中文亂碼問題

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市税产,隨后出現(xiàn)的幾起案子怕轿,更是在濱河造成了極大的恐慌,老刑警劉巖辟拷,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撞羽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡衫冻,警方通過查閱死者的電腦和手機(jī)诀紊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來隅俘,“玉大人邻奠,你說我怎么就攤上這事∥樱” “怎么了碌宴?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蒙畴。 經(jīng)常有香客問我贰镣,道長(zhǎng),這世上最難降的妖魔是什么膳凝? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任碑隆,我火速辦了婚禮,結(jié)果婚禮上蹬音,老公的妹妹穿的比我還像新娘上煤。我一直安慰自己,他們只是感情好著淆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布劫狠。 她就那樣靜靜地躺著拴疤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嘉熊。 梳的紋絲不亂的頭發(fā)上遥赚,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音阐肤,去河邊找鬼凫佛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛孕惜,可吹牛的內(nèi)容都是我干的愧薛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼衫画,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼毫炉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起削罩,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤瞄勾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后弥激,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體进陡,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年微服,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了趾疚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡以蕴,死狀恐怖糙麦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丛肮,我是刑警寧澤赡磅,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站宝与,受9級(jí)特大地震影響焚廊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜伴鳖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一节值、第九天 我趴在偏房一處隱蔽的房頂上張望徙硅。 院中可真熱鬧榜聂,春花似錦、人聲如沸嗓蘑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至豌汇,卻和暖如春幢炸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拒贱。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工宛徊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逻澳。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓闸天,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親斜做。 傳聞我的和親對(duì)象是個(gè)殘疾皇子苞氮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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