简明YAML教程

2023-11-19

前言:yaml是一种用来描述配置的语言,其可读性和简洁性较json更胜一筹,用yml写成的配置文件,以.yml结尾。

YAML的基本语法规则

  1. 大小写敏感
  2. 使用缩进表示层级关系
  3. 缩进是使用空格,不允许使用tab
  4. 缩进对空格数目不敏感,相同层级需对齐
  5. 用“#”表示行注释

YAML的数据结构

YAML的数据结构比较简单,只有三种:
1. 对象:类似map,用键值对表示
2. 数组:与java数组同含义
3. 纯量(scalars):元数据,不可再分,多数情况下指基本数据类型

以上三种数据接口分别如下表示:(注意,冒号和连词线后边有一个空格)

  • 对象:
name:zhangsan

或者用行内元素表示

student:{name:zhangsan,age:13}
  • 数组:一组以连词线-构成的数据结构,
- A
- B
- C
  • 纯量
    包括:字符串,布尔值,整数,浮点数,null,时间,日期,
#数值直接表示
number: 1.1
#布尔用true, false
isOnline: false
#null用波浪线表示
isNUll: ~
#时间采用iso8601
time: 2001-12-14t21:59:43.10-05:00
#日期用复合ios8601表示
date: 2017-09-01
#两个感叹号表示强转数据类型
a: !!str 123
b: !!str true

其中字符串是比较复杂的一种情况:

#字符串默认不用引号
str: 这是一个字符串
#字符串有空格或者特殊字符时,放在引号内(单双都可)
str: 'this is a string'
#字符串中间有单引号,需要用两个单引号转义
str: 'he''s name is X'

JAVA解析yml

yml作为一种通用的配置语言,各语言均有对应的解析工具,这里以java的SnakeYAML为例:

maven仓库地址:
http://mavenrepository.com/artifact/pl.droidsonroids.yaml/snakeyaml

maven配置:

<dependency>
    <groupId>pl.droidsonroids.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
    <version>1.18.2</version>
</dependency>

新建yml文件

这里新建一个简单的yml配置文件:
文件名:config.yml
内容:

api_host: http://baidu.com
username: aaa

Java解析

        Yaml yaml = new Yaml();
        File file = new File("D:\\code\\ymltest\\src\\main\\resources\\config.yml");
        FileInputStream fi= null;
        try {
            fi = new FileInputStream(file.getAbsolutePath());
            Object result = yaml.load(fi);
            System.out.println(result.getClass());
            System.out.println(result);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

解析结果:

class java.util.LinkedHashMap
{api_host=http://baidu.com, username=aaa}

SnakeYAML也支持直接映射为对象:

age: 1
name: asd
params:
  event: what's up
  url:  http://baidu.com
favoriteBooks:
  - Gone with the wind
  - The Little Prince
Yaml yaml = new Yaml();
        File file = new File("D:\\code\\ymltest\\src\\main\\resources\\config.yml");
        FileInputStream fi= null;
        try {
            fi = new FileInputStream(file.getAbsolutePath());
            Configs result = yaml.loadAs(fi, Configs.class);
            System.out.println(result.toString());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

解析结果:

Configs{age=1, name='asd', params={event=what's up, url=http://baidu.com}, favoriteBooks=[Gone with the wind, The Little Prince]}

至此,yml文件已经解析完毕,在最新的版本中,该解析器已经支持在移动端使用,所以在安卓中也可以考虑使用yml对工程进行配置

参考:

http://www.ruanyifeng.com/blog/2016/07/yaml.html?f=tt

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简明YAML教程 的相关文章

随机推荐

  • 解析request.getParameter() 和request.getAttribute() 区别

    一 request getParameter 和request getAttribute 区别 1 request getParameter 取得是通过容器的实现来取得通过类似post get等方式传入的数据 request setAttr
  • django高并发部署

    django高并发部署
  • React解密:React Hooks函数之useCallback和useMemo

    之所以将useCallback和useMemo放到一起 从某种意义上说 他们都是性能优化的始作俑者 他们也有很多的共性 我们先来回顾一下class组件性能优化的点 调用 setState 就会触发组件的重新渲染 无论前后 state 是否相
  • 64位系统树莓派部署yolo-fatestv2---超多坑

    最近在研究yolo fastest 开始面对作者大大的一堆部署的指令在pycharm的终端里面一顿操作 然后一路报错 后来才发现原来都是linux的指令 后来在虚拟机上也尝试部署过 成功之后本来想直接挪到树莓派上 但是尝试许久都以失败告终
  • mysql修改权限

    mysql权限 显示用户权限 mysql gt show grants for jeffrey localhost 一般 数据库管理员首先建立用户 定义其非特权特征 例如其密码 是否使用安全链接以及对服务器资源的访问限制 而后使用grant
  • java枚举类的定义和使用

    开始时间 2018年8月11日11 04 35 结束时间 2018年8月11日12 30 37 累计 1小时 枚举类的对象是有限个 对象个数 一个可以看做单例模式的实现 多个 为枚举类 1 如何定义 cccccccc 1 私有化类的构造器
  • 服务器虚拟化解决方案

    根据以往经验推断 一台主流双路 PC 服务器可以承担 3 6 个应用系统在其 上运行 本期项目总共有 N 个业务系统 考虑到硬件资源需具备一定的冗余能 力和实现高可用 HA 在线迁移 动态调度 后期扩展等诸多因素 推荐 2 台双 路 PC
  • 智能指针 -- unique_ptr

    源码分析 源码链接 gcc unique ptr h at master gcc mirror gcc GitHub 上面链接中的源码是unique ptr的完整定义 我们来简化其类结构看看 template
  • Android基础面试常常死在这几个问题上,小白也能看明白

    前言 疫情一过 我相信将会是面试求职的高峰时期 如果此时手里有份高质量的面试宝典 那么你将得心应手面对考官各种问题 虽然不敢保证你能应聘上心仪的职位 但是能保证看完这些内容你的收获将超乎你的想象 此份面试宝典搜集各大网络平台 如果侵权 请您
  • 【黑叔说】之《进阶必备知识》(一)

    前言 每天一分钟 通勤跟我学 进阶知识点 系列的知识 来自互联网 由黑叔总结或改编 仅供参考 一 前端模块化 二 webpack简易版实现 function modules function require fileName const f
  • 单片机流水灯C语言实验报告,单片机LED灯实验报告.doc

    桂林电子科技大学 实验报告 2016 2017 学年第一学期 开 课 单 位 海洋信息工程学院 适用年级 专业 14级机械 课 程 序 号 BS1615000 03 课 程 代 码 BS1615000 实 验 名 称 流水灯 流水灯实验报告
  • 6种方法计算神经网络参数量Params、计算量FLOPs、Macs简单代码

    方法1 统计模型参数量 total sum param nelement for param in model parameters print Number of parameter 2fM total 1e6 方法2 统计flops和参
  • Python——报数出圈

    编写程序 模拟报数游戏 有n个人围成一圈 顺序编号 从第一个人开始从1到k 假设k 3 报数 报到k的人退出圈子 然后圈子缩小 从下一个人继续游戏 问最后留下的是原来的第几号 n int input 请输入总人数 n k int input
  • 解决JavaScript中new Date(string)在IE不兼容的问题

    1 问题描述 let date 2018 09 17 let dateStr new Date date let year dateStr getFullYear let month dateStr getMonth 1 let day d
  • 【Unity2d】带你制作一款类似于金山打字的小游戏

    博主大概08年开始接触电脑游戏 当时玩的是我哥的电脑 那时候家里没网 只可以玩电脑上自带的单机游戏 比如扫雷 蜘蛛纸牌等等 当然还有红色警戒 冰封王座 星际争霸 帝国崛起等等 这些大概是我哥当时在大学下载的 也是那个时候对游戏充满了兴趣 记
  • 第十一届蓝桥杯c/c++省赛大学B组(第一次)

    目录 A题 跑步训练 5 模拟 B题 纪念日 5 年月日 C题 合并检测 10 找规律 D题 REPEAT程序 10 模拟 E题 矩阵 15 DP F题 整数序列 15 G题 解码 20 模拟 H题 走方格 20 dfs I题 整数拼接 2
  • 世界两万英尺范围内,均分布有运维体系架构

    几年前 Microsoft 与技术领先的社区专家合作发布了一本受欢迎的指导书 标题为 适用于容器化 NET 应用程序的 NET 微服务 深入探讨了构建分散式应用程序的原则 模式和最佳做法 其中包括一个功能齐全的微服务参考应用程序 展示了体系
  • [从零开始学DeepFaceLab-5]: 使用-命令行八大操作步骤-第2步:从源视频中提取图片

    目录 总体流程 步骤2 从源视频中提取图片 2 0 源视频文件和大小的选择 2 1 命令 2 extract images from video data src bat 必选
  • Qt

    我的RFID程序中 Widget继承自QWidget 在Widget h中 public定义了数据成员 QTableWidget cardtableWidget 在Widget cpp的Widget构造函数中 初始化了QTableWidge
  • 简明YAML教程

    前言 yaml是一种用来描述配置的语言 其可读性和简洁性较json更胜一筹 用yml写成的配置文件 以 yml结尾 YAML的基本语法规则 大小写敏感 使用缩进表示层级关系 缩进是使用空格 不允许使用tab 缩进对空格数目不敏感 相同层级需