YML学习

讲解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 字面量数据类型

  1. 字面量是指单个的,不可拆分的值,例如:数字、字符串、布尔值、以及日期等。
  2. 在 YAML 中,使用"key:[空格]value"的形式表示一对键值对(空格不能省略) , 如 url:
    www.biancheng.net
  3. 字面量直接写在键值对的"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"]] 

3.YML解析

相关推荐
知识分享小能手14 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
茯苓gao17 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾17 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT18 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa18 小时前
HTML和CSS学习
前端·css·学习·html
看海天一色听风起雨落19 小时前
Python学习之装饰器
开发语言·python·学习
cyforkk19 小时前
Spring 异常处理器:从混乱到有序,优雅处理所有异常
java·后端·spring·mvc
Z_z在努力19 小时前
【杂类】Spring 自动装配原理
java·spring·mybatis
speop20 小时前
llm的一点学习笔记
笔记·学习
非凡ghost20 小时前
FxSound:提升音频体验,让音乐更动听
前端·学习·音视频·生活·软件需求