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解析

相关推荐
吃好睡好便好20 分钟前
说说损伤膝盖的行为和保护膝盖的方法
学习
Java知识技术分享31 分钟前
策略模式的两种实现:抽象类和接口
java·spring·策略模式
一只机电自动化菜鸟1 小时前
一建机电备考笔记(34)焊接技术(设备与材料1)(含考频+题型)
笔记·学习·职场和发展·生活·学习方法
欢璃1 小时前
表白墙案例
java·开发语言·jvm·spring boot·spring·maven·mybatis
小仙女的小稀罕1 小时前
外教课转写工具选择建议 | 实测筛选高口碑实用方案
大数据·人工智能·学习·自然语言处理·语音识别
薛定e的猫咪2 小时前
【ICML 2025】MODULI:基于扩散模型解锁离线多目标强化学习的偏好泛化
人工智能·学习·算法·机器学习
咸鱼翻身小阿橙2 小时前
Qt Quick 登录界面代码学习笔记
笔记·qt·学习
Brilliantwxx2 小时前
【C++】priority_queue以及 仿函数 的学习
开发语言·c++·笔记·学习·算法
小+不通文墨2 小时前
树莓派4b-wiringpi库的安装和使用
驱动开发·经验分享·笔记·嵌入式硬件·学习
xuhaoyu_cpp_java2 小时前
SpringMVC学习(三)
java·经验分享·笔记·学习·spring