当前位置:网站首页 > 编程语言 > 正文

yml文件取值(yml文件语法)



YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:”Yet Another Markup Language”(仍是一种标记语言)。

YAML是一个类似 XML、JSON 的标记性语言。YAML 强调以数据为中心,并不是以标识语言为重点。因而 YAML 本身的定义比较简单,号称“一种人性化的数据格式语言”。

  • YAML是一种非常简单的基于文本的人类可读的语言,用于在人和计算机之间交换数据。
  • YAML是不是一种编程语言。它主要用于存储配置信息。
  • YAML 的缩进就像 Python 的缩进一样优雅。
  • YAML 还减少了 JSON 和 XML 文件中的大部分“噪音”格式,例如引号、方括号和大括号

yml主要用于软件配置,大有替代properties、XML、JSON的趋势,主要其格式简洁易懂

先看yml示例:

 
  

对比json

 
  

对比java,和java对象之间的关系更接近

 
  
  • 使用缩进表示层级关系。 | json使用花括号{}
  • 缩进时不允许使用 Tab 键,只允许使用空格。
  • 缩进的空格数不重要,但同级元素必须左侧对齐。
  • 大小写敏感
  • key:value键值对模式 |和json一样
  • 内容如字符串,不需要加""

与json区别

  • 大小写敏感 (json 里也是大小写敏感的)
  • 使用缩进表示层级关系 (json 中使用 {} 表示层级)
  • "#"表示注释 (json 不允许写注释, yaml 写的配置文件要比 json 方便很多)
  • key : val 值之前必须有空格
  • 多个key-val组合,不需要加逗号","

总结:比json少{},逗号,多缩进和值前空格

YAML 支持以下三种数据结构:

  • 对象:键值对的集合
  • 数组:一组按次序排列的值
  • 字面量:单个的、不可拆分的值
  1. 字面量是指单个的,不可拆分的值,例如:数字、字符串、布尔值、以及日期等。
  2. 在 YAML 中,使用“key:[空格]value”的形式表示一对键值对(空格不能省略), 如 url:
    www.biancheng.net。
  3. 字面量直接写在键值对的“value”中即可,且默认情况下字符串是不需要使用单引号或双引号的。

示例:

 
  

2.2.1 字符串

字符串可以加单引号或双引号或者没有引号。

 
  

都是合法的,等价于json

 
  

多行文本
字符串比较多的时候,更好的展示,选择单行/多行文本展示,用| 前缀。
例如,配置 GitHub Actions 时候运行一些命令:

 
  

等价json

 
  

2.2.2 NULL

YAML 声明空值有以下几种方法:

 
  

等同json

 
  

2.4.5 时间戳(timestamp)

时间戳表示单个时间点。它使用符号形式 ISO8601。如果未添加时区,则假定该时区为 UTC。要描述日期格式,可以省略时间部分。在这种情况下,时间默认为00:00:00Z。请参见下面示例中的用法。

 
  

但实际转化有点问题

写法2:不推荐,除非比较深的嵌套。感觉有点像json数据

key: {key1: value1, key2: value2, …}

 
  

或者

 
  

2.4.1 值为基础类型

写法1:推荐
YAML 使用“-”表示数组中的元素,注意:- 后面也要加空格

 
  

写法2:这种也推荐,比较简化
用[]表示 key: [value1,value2]

 
  

2.4.2 值为对象

如果值一个对象如:

 
  

2.4.3 多维数组

 
  

2.4.4 复杂类型

有对象,有数组、基本数据类型

 
  

java代码

 
  

对应的yml填充数据

 
  

默认情况下,YAML 会自动推断数据类型,就像 TypeScript 的类型推断一样,但是当你需要你也可以使用 标签(tags)显示指定类型,比如整数类型 两个英文感叹号 !! 再加上 int 就变成了一个整数 tag ——!!int。

 
  

YML值相互引用的基本语法如下:
key:&anchor
value other_key:anchor
在上面的例子中,key是一个YML键,&anchor是一个锚点,value是一个值。
通过在其他地方使用

anchor来引用这个值。

 
  

实际效果如下

 
  

复用大节点

 
  

等价于

 
  

& 用来建立锚点(defaults),<< 表示合并到当前数据,* 用来引用锚点。注意只是复用这个节点的数据,这个节点不会复用过来

准备两个vo类

 
  
 
  

3.1.1 Environment注解

在Spring中有一个类Environment,它可以被认为是当前应用程序正在运行的环境,它继承了PropertyResolver接口,因此可以作为一个属性解析器使用。先创建一个yml文件,属性如下:

 
  

使用起来也非常简单,直接使用@Autowired就可以注入到要使用的类中,然后调用它的getProperty()方法就可以根据属性名称取出对应的值了。

 
  

3.1.2 YamlPropertiesFactoryBean

在Spring中还可以使用YamlPropertiesFactoryBean来读取自定义配置的yml文件,而不用再被拘束于application.yml及其激活的其他配置文件。

在使用过程中,只需要通过setResources()方法设置自定义yml配置文件的存储路径,再通过getObject()方法获取Properties对象,后续就可以通过它获取具体的属性,下面看一个例子:

 
  

前面介绍的几种方式,在Spring环境下无需引入其他依赖就可以完成的,接下来要介绍的SnakeYml在使用前需要引入依赖,但是同时也可以脱离Spring环境单独使用。先引入依赖坐标:

3.2.1 pom依赖

 
  

3.2.2 解析yml文件到map

test.yml

 
  

解析:
Yaml yaml=new Yaml();
1.返回的是一个map对象:map<key,value>
Map<String, Object> map=yaml).load(inputStream);
2.返回的是一个VO对象
VO vo=yaml).load(inputStream,VO.class);




 
  

效果

 
  

3.2.3 解析yml到vo对象

 
  

效果

 
  

3.2.4 vo生成yml格式字符串

 
  

执行效果:

 
  

jackson不仅可以解析json,也支持yml

3.3.1 pom依赖

 
  

3.3.2 解析yml文件到map

test.yml

 
  

java代码

 
  

效果

 
  

3.3.3 解析yml到vo对象

 
  

效果

 
  

看下图,从左往右是 XML、JSON、YAML 文件,JSON 通过 {} 和 [] 等简化了 XML,变得更加直观,但是当嵌套过深 XML 需要找结尾标签,JSON 需要找结尾的 },无论 XML 还是 JSON 都需要找结尾标记,很不直观,但 YAML 直接做的比 JSON 更加激进,连符号都没了,立体结构也变得扁平了,更加符合人类阅读习惯。

Java

 
  

对应yml

 
  

错误:

 
  

不要因为缩进把java类名也写入,和json一样,yml只和对象的属性值有关,和类无关

到此这篇yml文件取值(yml文件语法)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 进程控制块内容是什么(进程控制块指的是)2025-07-03 09:00:07
  • jfls是什么意思(jfs是什么意思啊)2025-07-03 09:00:07
  • 速排小蚂蚁编辑器官网登录(速排小蚂蚁编辑器怎么粘贴文字)2025-07-03 09:00:07
  • ssh免密码登录配置(ssh免密码登录配置信息)2025-07-03 09:00:07
  • kali更换国内源(kali更新国内源)2025-07-03 09:00:07
  • git 指定版本(git设置版本号)2025-07-03 09:00:07
  • 域名查询 反ip(域名查询ip反查)2025-07-03 09:00:07
  • 101协议报文(101协议 通讯流程)2025-07-03 09:00:07
  • 打印控件怎么安装(打印控件怎么下载安装)2025-07-03 09:00:07
  • ipv6回环地址作用(ipv6回环地址是什么)2025-07-03 09:00:07
  • 全屏图片