16个实例带你玩转yaml数据格式(教程)——别再说不懂yaml了嗷
“ yaml数据格式可谓是自动化测试领域一颗璀璨的明星,笔者最近正好要用到yaml数据格式,可是笔者始终找不到一个想要的yaml格式教程,于是便奋发图强,攻上yaml官网,钻研苦读最新版本的yaml,写下此篇教程,以供大家更加方便、快速、深入地了解yaml数据格式。“
PS:“ 此篇文章笔者希望新手老手都能顺序阅读,因为内容环环相扣,如果看不懂下文大概率是忽略了上文的关键点。 ”
- 博主每篇文章的注释都是干货!每个代码段都有详细注释,一定要认真看注释!!!
- 重要的事情说三遍:一定要看注释!!!一定要看注释!!!一定要看注释!!!
基本概念
-
yaml(YAML Ain't Markup Language):yaml是专注于数据data存储层面的语言
-
"#"表示注释
-
区分大小写
-
文件扩展名.yaml/.yml
-
字符串引号可以省略!!!
-
标准的JSON格式属于YAML的子格式,标准的JSON可以在YAML下运行
YAML列表
- "-" + 空格 + value开头,表示列表
- 缩进表示层级关系
- 一定要认真看注释!!!
# YAML列表表示法# - + 空格 + value开头表示列表# 实例1:[A,B,C]- A- B- C# 实例2:[[A,B],[C,D]]- - A - B- - C - D# 实例3:# -后不能缺少空格,缺少空格导致的后果-A-B-C# 会被存储为格式:[-A-B-C]是一串字符串而不是列表
YAML对象
-
方式一
-
流式(flow)语法表示对象
key + 空格 + :{key1:value + , + key2:value}
-
-
方式二
-
key:
缩进+key1: + 空格 + value
缩进+key2: + 空格 + value
-
- 一定要认真看注释!!!
# 方式一:# 流式(flow)语法表示对象# key + 空格 + :{key1:value + , + key2:value}# 实例4:clientA:{name:张三, age:18, hobby:game}# 注意:在yaml中冒号:后一定要加空格clientA: {name: 张三, age: 18, hobby: game}clientB: {name: 张三, age: 19, hobby: eating}# 方式二:# key:# 缩进+key1: + 空格 + value# 缩进+key2: + 空格 + value# 实例5:# 注意此写法中对象属于集合,读取时是无序的、可重复的# 注意与下文列表+对象混合使用对比(实例6)# {# clientC:{name:张三,age:18 hobby:game}# clientD:{name:李四,age:19 hobby:hobby}# }# yaml语法clientC:name: 张三 age: 18hobby: gameclientD:name: 李四 age: 19hobby: eating
YAML列表+对象混合使用
-
Space:空格
-
核心要点:
-Space表示列表
:Space表示对象 - 一定要认真看注释!!!
# 列表+对象混合使用# Space:空格# 核心要点:# -Space表示列表# :Space表示对象# 注意区分以下两种实例:# 实例6:# {# clientE:[{"name": "张三"},{"age": 18},{"hobby": "game"}]# clientF:[{"name": "李四"},{"age": 19},{"hobby": "eating"}]# }# yaml表示语法:clientE: - name: 张三 - age: 18 - hobby: gameclientF: - name: 李四 - age: 19 - hobby: eating# 列表+对象多重嵌套# 实例7:# [# {name:张三,age:18 hobby:game },# {name:李四,age:19 hobby:[game,eating,drinking] }# ]# yaml表示语法:- name: 张三 age: 18 hobby: game- name: 李四 age: 19 hobby: - game - eating - drinking
复杂的多值映射Mapping存储
-
?问号下的内容表示变量
-
:冒号下的内容表示映射的值
-
一定要认真看注释!!!
# 复杂的多值映射Mapping存储# ?问号下的内容表示变量# :冒号下的内容表示映射的值# 多值对应映射# 实例8:CBA总决赛:[广东VS辽宁]三场比赛的时间分别是[5.7,5.8,5.9]? - 广东 - 辽宁: - 5.7 - 5.8 - 5.9# 注意理解映射关系# 表示广东队在5.7、5.8、5.9都有比赛# 辽宁队在5.7、5.8、5.9都有比赛# 在这个例子中,问号下每一个元素,都对应着冒号中三个值
文档分割
- ---表示一个文档的开始(只有一个文档时可不写)
- ...表示一个文档的结束(如果有---表示一个新文档的开始,则...可省略,规范写法需要...)
- 一定要认真看注释!!!
# 文档分割# ---表示一个文档的开始(只有一个文档时可不写)# ...表示一个文档的结束(如果有---表示一个新文档的开始,则...可省略,规范写法需要...)# 一个文档中有两个子文档login和data实例:# 实例9:# 这是第一个子文档login----A-B-C...# 这是第二个子文档data----dataA-dataB-dataC...# 上述表示一个文档被分割为两个子文档
数据的重复引用
-
存储:&+自定义命名
-
引用:*+引用自定义命名
-
引用列表内容、引用对象内容
-
一定要认真看注释!!!
# 数据的重复引用# &+自定义命名 = 存储# *+引用名字 = 引用# 引用列表内容:标识符号写在需要引用的变量前# 实例10:# ["method","method"]- &M method # 将method存储在变量M中- *M # 使用标识符M引用# 如果写在引用对象method后面则无效- method &M # method &M整体被视作一个字符串- *M# 引用对象内容:标识符号可写在冒号之后,方便缩进编写# 引用对象内容一般把别名写在冒号之后# 实例11:# ClientA:{name: 张三,age: 18}# VIPClient:{name: 张三,age: 18}clientA: &A # 记得冒号后有一个Space空格 name: 张三 age: 18VIPclient: *A # 引用时也不要忘记缩进嗷
标签常量
- 整数/浮点数/字符串/Null/日期时间
- 一定要认真看注释!!!
# 标签常量# 整数/浮点数/字符串/Null/日期时间# 实例12:tags: - 5678 # 可以支持2进制、8进制、16进制等等多种格式表示 - 8.8e+3 # 科学计数法:8800 - -.inf # 负无穷 - 'string' # 特别强调是字符串时可以加引号 - ~ # ~ 表示null - 2022-5-8 # 表示日期用-直接连接,保存内容为:"2022-5-8",若要保存时间根据所需要时间格式保存即可
进阶语法
-
强制类型转换
- 一定要认真看注释!!!
# 强制类型转换# 用!!强制转换类型# 实例13:not-date: !!str 2022-5-8 # 由于强制转换为字符串所以保存内容为{"not-date": "2022-5-8"}
-
标量scalar表示法
- 一定要认真看注释!!!
# 标量scalar表示法# 独立字符串换行:# yaml语法中换行表示为空格# 实例14:[曾经沧海难为水, 除却巫山不是云。]- 曾经沧海难为水, 除却巫山不是云。# yaml语法中空行表示为换行# 实例15:# [# 曾经沧海难为水,# 除却巫山不是云。# ]- 曾经沧海难为水, # 这行要空着才会分行 除却巫山不是云。
-
元素换行
- 一定要认真看注释!!!
# 对象中元素换行用 | 使对象中所有元素转化为字符串并换行,下列实例不再有列表性质# 对象中元素换行用 > 使对象中所有元素转化为字符串并在字符串最后换行,下列实例不再有列表性质# 实例16:Client: | - A - B# 保存内容:{ "Client": "- A\n- B\n"}# 实例:Client: > - A - B# 保存内容:{"Client": "- A - B\n"}
结语
“以上为yaml数据格式常用的所有内容,如想了解更多底层原理,点击下方官网自行阅读。”
如有读者发现文章有错误或者不清楚的地方,欢迎评论、私信交流!
官方文档参考链接:The Official YAML Web Sitehttps://yaml.org/
💗 “南风拂星底,爱意同风起,扶摇而上——九万里。”
——Created By 是羽十八ya