讲解YML使用场景、语法和解析
- 1.基础知识
-
- [1.1 什么是YML](#1.1 什么是YML)
- [1.2 YML优点](#1.2 YML优点)
- [1.3 YML使用场景](#1.3 YML使用场景)
- 2.YML语法
-
- [2.1 基础语法](#2.1 基础语法)
- [2.2 字面量数据类型](#2.2 字面量数据类型)
- [2.3 对象\MAP类型](#2.3 对象\MAP类型)
- [2.4 数组/List/Set](#2.4 数组/List/Set)
-
- [2.4.1 值为基础类型](#2.4.1 值为基础类型)
- [2.4.2 值为对象](#2.4.2 值为对象)
- [2.4.3 多维数组](#2.4.3 多维数组)
- 3.YML解析
1.基础知识
1.1 什么是YML
YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。
YAML是一个类似 XML、JSON 的标记性语言。YAML 强调以数据为中心,并不是以标识语言为重点。因而 YAML 本身的定义比较简单,号称"一种人性化的数据格式语言"。
1.2 YML优点
- YAML是一种非常简单的基于文本的人类可读的语言,用于在人和计算机之间交换数据。
- YAML是不是一种编程语言。它主要用于存储配置信息。
- YAML 的缩进就像 Python 的缩进一样优雅。
- YAML 还减少了 JSON 和 XML 文件中的大部分"噪音"格式,例如引号、方括号和大括号
1.3 YML使用场景
yml主要用于软件配置,大有替代properties、XML、JSON的趋势,主要其格式简洁易懂
2.YML语法
2.1 基础语法
先看yml示例:
java
person:
name: 蒋增奎
gender: 男
spring:
profiles: dev
datasource:
url: jdbc:mysql://127.0.01/banchengbang_springboot
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
对比json
java
spring:{
profiles:"dev",
datasource:{
url:"jdbc:mysql://127.0.01/banchengbang_springboot",
username:"root",
password:"root",
driver-class-name:"com.mysql.jdbc.Driver"
}
}
对比java,和java对象之间的关系更接近
java
private String profiles;
private Datasource datasource;
- 使用缩进表示层级关系。 | json使用花括号{}
- 缩进时不允许使用 Tab 键,只允许使用空格。
- 缩进的空格数不重要,但同级元素必须左侧对齐。
- 大小写敏感
- key:value键值对模式 |和json一样
- 内容如字符串,不需要加""
与json区别
- 大小写敏感 (json 里也是大小写敏感的)
- 使用缩进表示层级关系 (json 中使用 {} 表示层级)
- "#"表示注释 (json 不允许写注释, yaml 写的配置文件要比 json 方便很多)
- key : val 值之前必须有空格
- 多个key-val组合,不需要加逗号","
总结:比json少{},逗号,多缩进和值前空格
YAML 支持以下三种数据结构:
- 对象:键值对的集合
- 数组:一组按次序排列的值
- 字面量:单个的、不可拆分的值
2.2 字面量数据类型
- 字面量是指单个的,不可拆分的值,例如:数字、字符串、布尔值、以及日期等。
- 在 YAML 中,使用"key:[空格]value"的形式表示一对键值对(空格不能省略) , 如 url:
www.biancheng.net。 - 字面量直接写在键值对的"value"中即可,且默认情况下字符串是不需要使用单引号或双引号的。
示例:
java
name: 蒋增奎 #姓名
isMan: true # 男士
birth: 2023-12-01 #出身日期
weight: 80.5
height: 172
parent: ~ # ~ 表示null
2.3 对象\MAP类型
使用缩进表示对象与属性的层级关系。
写法1:推荐
key1: value1
key2: value2
写法2:不推荐,除非比较深的嵌套
key: {key1: value1, key2: value2, ...}
java
website:
name: baidu
url: www.baidu.com
或者
java
website: {name: baidu,url: www.baidu.com}
2.4 数组/List/Set
2.4.1 值为基础类型
写法1:推荐
YAML 使用"-"表示数组中的元素,注意:- 后面也要加空格
java
pets:
- cat
- dog
- pig
写法2:这种也推荐,比较简化
用[]表示 key: [value1,value2]
java
pets: [cat,dog,pig]
2.4.2 值为对象
如果值一个对象如:
java
# java 代码:
private List<Dog> lists;
#yml数据
lists:
- name: 可乐
age: 2 #注意前面没有 - 哦
- name: 卷毛
age: 3
或者:
lists:
- {name: 可乐,age: 2}
- {name: 卷毛,age: 3}
或者:
lists: [{name: 可乐,age: 2},{name: 卷毛,age: 3}]
2.4.3 多维数组
java
-
- A
- B
- C
-
- D
- E
- F
结果:[["A", "B", "C"],["D", "E", "F"]]