YAML語法簡易入門

YAML 語法

我的感受這篇文檔屬於"搬運工"性質java

能夠查看官方或者其餘的博客資料,會有一大堆的內容python

YAML語言的設計參考了JSON,XML和SDL等語言。YAML 強調以數據爲中心,簡潔易讀,編寫簡單。spring

有意思的命名:json

AML全稱是」YAML Ain’t a Markup Language」(YAML不是一種置標語言)的遞歸縮寫。 在開發的這種語言時,YAML 的意思實際上是:」Yet Another Markup Language」(還是一種置標語言)。數組

語法特色

  • 大小寫敏感
  • 經過縮進表示層級關係
  • 禁止使用tab縮進,只能使用空格鍵 (我的感受這條最重要)
  • 縮進的空格數目不重要,只要相同層級左對齊便可
  • 使用#表示註釋

支持的數據結構

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

雙引號和單引號的區分

雙引號"":不會轉義字符串裏面的特殊字符,特殊字符做爲自己想表示的意思。springboot

name: "123\n123"
---------------------------
輸出: 123 換行 123
複製代碼

若是不加引號將會轉義特殊字符,當成字符串處理數據結構

值的寫法

1.字符串

使用」或」「或不使用引號app

value0: 'hello World!'
value1: "hello World!"
value2: hello World!
複製代碼

2.布爾值

truefalse表示。spring-boot

3.數字

12 #整數 
014 # 八進制整數 
0xC #十六進制整數 
13.4 #浮點數 
1.2e+34 #指數 
.inf空值 #無窮大
複製代碼

4.空值

null~表示測試

5.日期

使用 iso-8601 標準表示日期

date: 2018-01-01t16:59:43.10-05:00
複製代碼

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

6.強制類型轉換(瞭解)

YAML 容許使用個感嘆號!,強制轉換數據類型,單歎號一般是自定義類型,雙歎號是內置類型。

money: !!str
123
date: !Boolean
true
複製代碼

內置類型列表

!!int # 整數類型 
!!float # 浮點類型 
!!bool # 布爾類型 
!!str # 字符串類型 
!!binary # 也是字符串類型 
!!timestamp # 日期時間類型 
!!null # 空值 
!!set # 集合 
!!omap,!!pairs # 鍵值列表或對象列表
!!seq # 序列,也是列表 !!map # 鍵值表
複製代碼

7.對象(重點)

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

car:
 color: red
 brand: BMW
複製代碼

一行寫法

car:{color: red,brand: BMW}
複製代碼

至關於JSON格式:

{"color":"red","brand":"BMW"}
複製代碼

8.數組

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

brand:
 - audi
 - bmw
 - ferrari
複製代碼

一行寫法

brand: [audi,bmw,ferrari]
複製代碼

至關於JSON

["auri","bmw","ferrari"]
複製代碼

9.文本塊

|:使用|標註的文本內容縮進表示的塊,能夠保留塊中已有的回車換行

value: | hello world! 輸出結果:hello 換行 world! 複製代碼

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

value: | hello value: |-
hello

value: |+
hello
輸出:hello\n hello hello\n\n(有多少個回車就有多少個\n)
複製代碼

注意 「|」 與 文本之間須另起一行

>:使用 > 標註的文本內容縮進表示的塊,將塊中回車替換爲空格,最終鏈接成一行

value: > hello world! 輸出:hello 空格 world! 複製代碼

注意 「>」 與 文本之間的空格

10.錨點與引用

使用 & 定義數據錨點(即要複製的數據),使用 * 引用錨點數據(即數據的複製目的地)

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

注意*引用部分不能追加內容


配置文件注入數據

/** * 將配置文件中配置的每個屬性的值,映射到這個組件中 * @ConfigurationProperties:告訴SpringBoot將本類中的全部屬性和配置文件中相關的配置進行綁定; * prefix = "person":配置文件中哪一個下面的全部屬性進行一一映射 * * 只有這個組件是容器中的組件,才能容器提供的@ConfigurationProperties功能; * */
@Component //實例化
@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方法
複製代碼

咱們能夠導入配置文件處理器,之後編寫配置就有提示了,@ConfigurationPropertiesIDE會提示打開在線的幫助文檔,配置依賴以下:

<!--導入配置文件處理器,配置文件進行綁定就會有提示-->
<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中時間格式
 maps: {bookName: "西遊記",author: '吳承恩'}
 tempList:
 - 紅樓夢
 - 三國演義
 - 水滸傳
 dog:
 dogName: 大黃
 dogAge: 4
複製代碼

在test中進行測試以下

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

    @Autowired
    private Person p1;

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

}
複製代碼

輸出結果爲:Person{name='胖先森', age=18, flag=false, birthday=Wed Dec 19 20:21:22 CST 2018, maps={bookName=西遊記, author=吳承恩}, tempList=[紅樓夢, 三國演義, 水滸傳], 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 //實例化
@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中進行測試以下

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

    @Autowired
    private Person p1;

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

}
複製代碼

輸出結果爲:Person{name='����', age=20, flag=null, birthday=Wed Dec 19 20:21:22 CST 2018, maps={bookName=ˮ䰴�, author=�޹���}, tempList=[һ������, ����ΪӮ], dog=Dog{dogName='��', dogAge=5}}

屬性文件中文亂碼問題

相關文章
相關標籤/搜索