详解YAML语法及占位符语法

简介: 设计了一个YAML数据结构来表示家庭信息,包括家庭名、父亲、母亲和孩子。父亲有名字和年龄,母亲有别名,孩子有名字、年龄和朋友列表,每个朋友有爱好和性别。字符串可以用单引号或双引号,双引号会转义特殊字符。YAML支持松散的键绑定。Spring Boot配置文件中,占位符可用于设置随机数,如${random.int},并可提供默认值,如${family.father.name:zimug}。

一、设计一个YAML数据结构

首先我们提出这样一个需求:

   #    1. 一个家庭有爸爸、妈妈、孩子。

   #    2. 这个家庭有一个名字(family-name)叫做“happy family”

   #    3. 爸爸有名字(name)和年龄(age)两个属性

   #    4. 妈妈有两个别名

   #    5. 孩子除了名字(name)和年龄(age)两个属性,还有一个friends的集合

   #    6. 每个friend有两个属性:hobby(爱好)和性别(sex)

上面的数据结构用yaml该如何表示呢?

   family:

     family-name: "happy family"

     father:

       name: zimug

       age: 18

     mother:

       alias:

         - lovely

         - ailice

     child:

       name: zimug

       age: 5

       friends:

         - hobby: football

           sex:  male

         - hobby: basketball

           sex: female

或者是friends的部分写成

    friends:

         - {hobby: football,sex:  male}

         - {hobby: basketball,sex: female}

规则1:字符串的单引号与双引号

   双引号: 会转义字符串里面的特殊字符,如下面\n被转义为换行:

    name: “zhangsan \n lisi”:输出:zhangsan 换行 lisi

   单引号: 不会转义特殊字符,特殊字符最终只是作为一个普通的字符串数据,如:

    name: ‘zhangsan \n lisi’:输出:zhangsan \n lisi

规则2:支持松散的语法

在spring Boot应用中YAML数据格式支持松散的绑定语法,也就是下面的三种key都是一样的。

family-name = familyName  = family_name

   但是不绝对,笔者印象中曾经遇到过某些写法不被兼容的情况。我通常使用中划线分隔的这种语法。

二、配置文件占位符

Spring Boot配置文件支持占位符,一些用法如下:为persopn.age设置一个随机数

   person:

       age: ${random.int}

2.1 随机数占位符

   ${random.value} - 类似uuid的随机数,没有"-"连接

   ${random.int} - 随机取整型范围内的一个值

   ${random.long} - 随机取长整型范围内的一个值

   ${random.long(100,200)} - 随机生成长整型100-200范围内的一个值

   ${random.uuid} - 生成一个uuid,有短杠连接

   ${random.int(10)} - 随机生成一个10以内的数

   ${random.int(100,200)} - 随机生成一个100-200 范围以内的数

2.2 默认值

占位符获取之前配置的值,如果没有可以是用“冒号”指定默认值

格式例如,xxxxx.yyyy是属性层级及名称,如果该属性不存在,冒号后面填写默认值

${xxxxx.yyyy:默认值}

比如为配置father.best属性,如果family.father.name存在则father.best=${family.father.name},family.father.name这个配置不存在,则取值father.best=zimug:

   father:

       best: ${family.father.name:zimug}

 


相关文章
|
6月前
|
XML C语言 数据格式
yaml基本语法
yaml基本语法
86 0
|
6月前
|
XML Java 数据格式
SpringBoot中yaml格式、语法规则及数据读取方式(3种)
SpringBoot中yaml格式、语法规则及数据读取方式(3种)
629 0
|
2月前
|
XML Java C语言
yaml语法格式,springboot中yaml的使用
本文介绍了YAML的语法格式和数据类型表示方法,并详细讲解了如何在Spring Boot中使用YAML,包括@ConfigurationProperties注解及Bean的创建、编写Controller、配置application.yaml配置文件,以及在pom.xml中开启YAML提示。
|
6月前
|
存储 前端开发 IDE
YAML语法记录
YAML语法记录
113 0
|
5月前
|
敏捷开发 缓存 安全
阿里云云效产品使用问题之手动触发流水线的YAML语法该怎么写
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
5月前
|
XML 数据格式
yaml基本语法和yaml数据格式,ymal对象写法,数组写法
yaml基本语法和yaml数据格式,ymal对象写法,数组写法
|
6月前
|
存储 JSON JavaScript
【YAML语法规范指南】从入门到精通,揭秘神秘语法,引领配置文件解析指南(基础结构篇)
"YAML Ain't Markup Language"(简称YAML)是一种专为人类设计的数据序列化语言,适用于多种现代编程语言,可广泛应用于各类日常任务。它是一种以人类可读形式呈现的、适用于多种语言的Unicode数据序列化标准。它基于敏捷编程中常见的本地数据结构,广泛应用于配置文件、互联网消息传递、对象持久化以及数据审计等多个领域。遵循Unicode标准、
656 8
【YAML语法规范指南】从入门到精通,揭秘神秘语法,引领配置文件解析指南(基础结构篇)
|
XML 运维 Java
SpringBoot中Yaml语法和JSR303数据校验《第三课》
SpringBoot中Yaml语法和JSR303数据校验《第三课》
186 0
|
XML JSON 数据格式
yaml语法
yaml语法