Yaml文件小结

Yaml文件有自己独立的语法,常用作配置文件使用,相比较于xml和json而言,减少很多不必要的标签或者括号,阅读也更加清晰简单;本篇主要介绍下YAML文件的基本语法,以及如何在Java中实现读写逻辑

I. 基本语法

  • 使用空格 Space 缩进表示分层,不同层次之间的缩进可以使用不同的空格数目,但是同层元素一定左对齐,即前面空格数目相同(不要使用tab)
  • # 表示单行注释
  • 破折号后面跟一个空格(a dash and space)表示列表
  • 用冒号和空格表示键值对 key: value
  • 简单数据(scalars,标量数据)可以不使用引号括起来,包括字符串数据
  • 用单引号或者双引号括起来的被当作字符串数据,在单引号或双引号中使用C风格的转义字符

1. 数组写法

一个简单的数组,用-来列出即可,如下

- apple
- orange
- banana

2. 对象

一个简单的kv对象

fruit:
name: banana
amount: 3
price: 4.99

加载后数据结构如下:

3. 对象数组

首先大结构是数组,但是数组内部是一个kv结构的对象

-
name: apple
price: 1.23
-
name: orange
price: 1.33
-
name: banana
price: 2.33

加载后数据结构如下:

4. 数组对象

首先大结构是对象,对象内部的成员是数组

name:
- apple
- orange
- banana
price:
- 4.99
- 2.34
- 3.99

加载后数据结构如下:

5. 多维数组

- [apple, 3.88]
- [orange, 3.99]
- [banana, 2.99]

用中括号包括起来,形成一个二维数组,加载后的数据结构如下

6. 对象的扩展写法

对于kv结构的对象,支持通过大括号的方式来替代,简化配置文件的行数

love: {name: apple, price: 2.99}
hite: {name: orange, price: 1.99}

上面的配置,等同于

love:
name: apple
price: 2.99
hite:
name: orange
price: 1.99

II. YAML文件读写

在Java生态环境中,读写YAML文件算是比较简单的一个事情了,一个是自己读取文件,然后按照语法进行解析(属于自己造轮子);另外一个就是利用开源库来读写,这里当然是选择已经颇为完善的开源库来处理了

1. 依赖

pom文件中添加maven依赖,版本号查询最新的即可

<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.17</version>
</dependency>

2. 封装类

public class YamlUtil {
public static InputStream loadStream(String path) throws IOException {
if (path.startsWith("http")) {
URL url = new URL(path);
return url.openStream();
} else if (path.startsWith("/")) {
return new FileInputStream(path);
} else {
return YamlUtil.class.getClassLoader().getResourceAsStream(path);
}
} public static <T> T loadConf(String path, Class<T> clz) throws IOException {
try (InputStream inputStream = loadStream(path)) {
Yaml yaml = new Yaml();
return yaml.loadAs(inputStream, clz);
}
} public static <T> void dumpConf(String save, T obj) throws IOException {
Yaml yaml = new Yaml();
yaml.dump(obj, new BufferedWriter(new FileWriter(save)));
}
}

实现比较简单了,直接利用 Yaml对象的 loadAs/dump 方法即可,对于测试用例,前面的截图已经给出,不再赘述

III. 其他

0. 小结

核心语法:

  • 使用空格 Space 缩进表示分层,不同层次之间的缩进可以使用不同的空格数目,但是同层元素一定左对齐,即前面空格数目相同(不要使用tab)
  • # 表示单行注释
  • 破折号后面跟一个空格表示列表
  • 用冒号和空格表示键值对 key: value
  • 简单数据可以不使用引号括起来,包括字符串数据
  • 用单引号或者双引号括起来的被当作字符串数据,在单引号或双引号中使用C风格的转义字符

转义demo:

comment: '#'
skip: "abc\n123"

对应测试用例及输出

@Test
public void testYamlUtil() throws IOException {
TC map = YamlUtil.loadConf("test.yml", TC.class);
System.out.println(map);
} @Data
@AllArgsConstructor
@NoArgsConstructor
public static class TC {
private String comment;
private String skip;
}

输出结果

YamlUtilTest.TC(comment=#, skip=abc
123)

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

180619-Yaml文件语法及读写小结的更多相关文章

  1. 入门Kubernetes - YAML文件

    前言 前篇文章中简单了解到如何把.Net Core 程序部署到k8s中,过程中使用了多个*.yaml文件,那么这些文件的格式及含义.语法是如何的呢? 接下来,进一步了解学习 一.YAML介绍: 1.简 ...

  2. Python基础笔记1-Python读写yaml文件(使用PyYAML库)

    最近在搭建自动化测试项目过程中经常遇到yaml文件的读写,为了方便后续使用,决定记下笔记. 一,YAML 简介 YAML,Yet Another Markup Language的简写,通常用来编写项目 ...

  3. YAML 模板文件语法

    YAML 模板文件语法 默认的模板文件是 docker-compose.yml,其中定义的每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来自动构建. 其 ...

  4. Python基础笔记2-ruamel.yaml读写yaml文件

    上一篇笔记记录了Python中的pyyaml库对yaml文件进行读写,但了解到ruamel.yaml也能对yaml文件进行读写,于是想尝试一下它的用法. 一,注意 这里首先要更正一下网上大部分博客的说 ...

  5. OpenCV教程(42) xml/yaml文件的读写

    参考资料: http://docs.opencv.org/modules/core/doc/xml_yaml_persistence.html #include "opencv2/openc ...

  6. YAML文件简介

    编程免不了要写配置文件,怎么写配置也是一门学问. YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便. 本文介绍 YAML 的语法,以 JS-YAML 的实现为例.你可以去 ...

  7. Docker Kubernetes YAML文件常用指令

    YAML文件常用指令 配置文件说明: 定义配置时,指定最新稳定版API(当前为v1). 配置文件应该存储在集群之外的版本控制仓库中.如果需要,可以快速回滚配置.重新创建和恢复. 应该使用YAML格式编 ...

  8. YAML文件中在单一文件中区分多个文件

    1.在单一文件中,可用连续三个连字号(---)区分多个文件. 2.另外,还有选择性的连续三个点号( ... )用来表示文件结尾. 题外:YAML其实语法很多也很灵活,但是针对Spring支持的语法其实 ...

  9. springboot的yaml基础语法与取值,配置类,配置文件加载优先级

    1.基本语法k:(空格)v:表示一对键值对(一个空格必须有):以空格的缩进来控制层级关系:只要是左对齐的一列数据,都是同一个层级的属性和值也是大小写敏感: server: port: 8081 pat ...

随机推荐

  1. [19/04/05-星期五] 多线程_Thread(线程、线条)、基本术语

    一.基本概念 多线程是Java语言的重要特性,大量应用于网络编程.服务器端程序的开发,最常见的UI界面底层原理.操作系统底层原理都大量使用了多线程. 我们可以流畅的点击软件或者游戏中的各种按钮,其实, ...

  2. ICompare 可比较接口

    执行

  3. 【转】Spring Boot Profile使用

    http://blog.csdn.net/he90227/article/details/52981747 摘要: spring Boot使用@Profile注解可以实现不同环境下配置参数的切换,任何 ...

  4. [后台管理]一套用vue搭建的框架

    1.提前的准备工作 前端开发工具有许多,当下流行的sublime等等都是前端比较受欢迎的,nodeJS和Vue等都是前端框架搭建流行的一套 安装nodeJS 设置环境变量 安装Visual Studi ...

  5. js和jquery对象的相互转换

    在使用jquery的过程中发现很多需要将jquery对象转成js对象的例子. Query 对象是通过 jQuery 包装DOM 对象后产生的对象.jQuery 对象是 jQuery 独有的,其可以使用 ...

  6. 浅析OC语言

    学习一门开发语言,首先要掌握的它的基本语法,这可能几天就能学会,但如果要融会贯通,就得去学习这门语言的框架和一些库,再结合一些项目的应用,这可能需要花几年的时间. OC是C语言的一个超集,是一门面向对 ...

  7. javascript中的栈堆内存

    <--------栈内存---------> 俗称叫做作用域(全局作用域/私有作用域) >为js代码提供的执行环境(执行js代码的地方) >基本数据内省是直接存放在栈内存中的 ...

  8. SQL:登录、连接数据库基本操作

    使用MySQL 登录.连接数据库 win+R打开控制台,cmd进入控制台,输入mysql -u root -p,后输入密码,进入数据库: 首先可以查看原有的数据库,输入 show databases; ...

  9. Kali Basic Configuration

    1:Kali Version root@kali-node01:~# cat /etc/os-release PRETTY_NAME="Kali GNU/Linux Rolling" ...

  10. UIPickerView的简单使用

    UIPickerView是一个选择器它可以生成单列的选择器,也可生成多列的选择器,而且开发者完全可以自定义选择项的外观,因此用法非常灵活,使用也比较简单.下面做了一个关于天气预报的小Demo 用 UI ...