XML刚学会,怎么又出来个YAML!
XML(eXtensible Markup Language)可扩展标记语言,曾经是IT软件开发界,标记数据、定义数据的大哥大。
很多从事Spring的同学,没少花时间在写XML文件上吧?
不过随着时间推移,XML的大哥大地位越来愈多收到了挑战。
这不,除了JSON,又冒出来一个YAML。到底YAML是个怎么回事?看看下面的文章,小伙伴们就明白了。
YAML(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。
YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。
Clark Evans(某软件行业大牛)在2001年首次发表了这种语言。当前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。
YAML的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。
YAML使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。
来看个YAML的例子John.yaml:
name: John Smith
age: 35
Wife:
name: Jane Smith
age: 33
children:
- name: Kate Smith
age: 10
- name: Daniel Smith
age 8
是不是很好理解?
一个人叫John Smith,35了(他居然35了?!他在哪里工作吖?)他夫人叫Jane Smith,比他小两岁。
John俩孩子,10岁的女儿和8岁的儿子。
即使不懂开发的人,是不是也能一眼看懂?!
目前,市面上常见的开发语言:JAVA、Python、Golang、PHP、C/C++都支持YAML。
YAML灰常适合用来表达层次结构式(hierarchical model)的数据结构,而且还有精致的语法可以表示关系性(relational model)的数据。
上面的例子,也能看出YAML的一个显著特点:多行缩进
数据结构可以用类似大纲的缩排方式呈现,结构通过缩进来表示,连续的项目通过减号“-”来表示,map结构里面的key/value对用冒号“:”来分隔。
下面简单从研发角度描述一下YAML:
1.YAML语法
• 大小写敏感
• 使用缩进表示层级关系
• 缩进时不允许使用Tab键,只允许使用空格。
• 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
2.支持的基本数据结构
• 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
• 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
• 纯量(scalars):单个的、不可再分的值
2.1 对象:
YAML对象,是一组键值对,使用冒号结构表示。
例如:Name:John
Yaml 也允许另一种写法,将所有键值对写成一个行内对象。
例如:Person: { FirstName: John, LastName: Does}
2.2 数组:
YAML中,一组连词线开头的行,构成一个数组。
例如:
- John
- Richard
- Steve
YAML中,数据结构的子成员是一个数组,则可以在该项下面缩进一个空格。
例如:
-
- John
- Richard
- Steve
YAML的数组也可以采用行内表示法。
例如:people: [John, Richard]
2.3 纯量:
YAML中纯量是最基本的、不可再分的值。以下数据类型都属于 JavaScript 的纯量。
• 字符串
• 布尔值
• 整数
• 浮点数
• Null
• 时间
• 日期
3.不得不说的字符串
字符串是各种开发语言里最常见,也是比较复杂的一种数据类型。
YAML中,字符串默认不使用引号表示。
例如:Name:JohnDoe
复杂点儿的,YAML字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格。
例如:
introduction: John
Doe
Chinese
转换成JavaScript,变这样:
{ introduction: 'John Doe Chinese' }
再复杂点儿的,YAML中多行字符串可以使用 | 保留换行符,也可以使用 > 折叠换行。
例如:
husband: |
John
Smith
wife: >
Jenny
Smith
转为 JavaScript 代码如下。
{ this: 'John Smith ', that: 'Jenny Smith ' }
多数情况下:以上内容应付日常工作、面试足够了。
以下内容供学有余力的同学参考:
4.一个高级用法
YAML中,锚点 & 和别名 * ,可以用来引用。
举个例子:
defaults: &defaults
database: postgres
host: localhost
development:
database: our_development
<<: *defaults
test:
database: our_test
<<: *defaults
等同于下面的代码:
defaults:
database: postgres
host: localhost
development:
database: our_development
database: postgres
host: localhost
test:
database: our_test
database: postgres
host: localhost
&用来建立锚点(defaults),<<表示合并到当前数据,*用来引用锚点。
关于YAML,今天就介绍这么多,同学们想要更多了解YAML,可以关注官网:https://yaml.org/
作 者:Testfan Arthur
出 处:微信公众号:自动化软件测试平台
版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接
XML刚学会,怎么又出来个YAML!的更多相关文章
- 刚学会 C++ 的小白用这个开源框架,做个 RPC 服务要多久?
本文适合有 C++ 基础的朋友 本文作者:HelloGitHub-Anthony HelloGitHub 推出的<讲解开源项目>系列,本期介绍基于 C++ 的 RPC 开源框架--rest ...
- SpringBoot中yaml配置对象
转载请在页首注明作者与出处 一:前言 YAML可以代替传统的xx.properties文件,但是它支持声明map,数组,list,字符串,boolean值,数值,NULL,日期,基本满足开发过程中的所 ...
- C#与yaml解析
YAML 官方网站称 YAML 是"一种所有编程语言可用的友好的数据序列化标准".YAML Ain't Markup Language,和GNU一样,YAML是一个递归着说&quo ...
- 雅美尓(yaml)实战
献给跟我一样对yaml(雅美尓)有婶婶挫败感的同学! 开始第一个pylon工程,我们就跟yaml配置文件开始了不解之缘.yaml是什么?它有哪些规则? 大IBM的文章如是说:YAML 是一种比 XML ...
- YAML 技术研究
YAML预研文档 YAML概要 YAML是"YAML Ain't a Markup Language"(YAML不是一种置标语言)的递归缩写,早先YAML的意思其实是:" ...
- python yaml使用
YAML Ain't Markup Language 和GNU一样,YAML是一个递归着说“不”的名字.不同的是,GNU对UNIX说不,YAML说不的对象是XML. YAML不是XML. 为什么不是X ...
- 【Yaml】Yaml学习笔记
转载:https://blog.csdn.net/moshenglv/article/details/52084899 YAML何许物也?在XML泛滥的情况下,YAML的出现的确让人眼前一亮,在初步学 ...
- PHP 与 YAML
PHP 与 YAML 这一段时间都没有写blog,并不是因为事情多,而是自己变懒了.看到新技术也不愿意深入思考其背后的原理,学习C++语言了近一个多月,由于学习方法有问题,并没有什么项目可以练手.靠每 ...
- YAML文件简介
编程免不了要写配置文件,怎么写配置也是一门学问. YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便. 本文介绍 YAML 的语法,以 JS-YAML 的实现为例.你可以去 ...
随机推荐
- vscode中如何加eslint检查工具
代码的质量对开发人员个人的成长以及公司的发展至关重要,所以如何使用把控代码的质量是大家经常思考的问题.除了代码审核之外,代码检查工具成了把控代码质量的第一道门槛,非常好用,可以建立一些团队约定的代码风 ...
- Leetcode之动态规划(DP)专题-309. 最佳买卖股票时机含冷冻期(Best Time to Buy and Sell Stock with Cooldown)
Leetcode之动态规划(DP)专题-309. 最佳买卖股票时机含冷冻期(Best Time to Buy and Sell Stock with Cooldown) 股票问题: 121. 买卖股票 ...
- jQuery之替换节点
如果要替换节点,jQuery提供了两个方法:replaceWith()和replaceAll(). 两个方法的作用相同,只是操作颠倒了. 作用:将所有匹配的元素都替换成指定的HTML或者DOM元素.( ...
- RestTemplate连接池(转载)
出处:http://zhangzhi19861216.cnblogs.com/ spring-boot RestTemplate 连接池 以前我们项目都是基于Apache HttpClient 连接池 ...
- 【机器学习】ICA特征提取
看完了ICA的一整套原理介绍后,感觉完整的介绍和andrew ng的课程中的ICA特征提取关系不是很大:在ICA的理论中,主要用于盲源分离的,也就是混合的观测数据X,通过一个正交的且其范数为1的分离矩 ...
- Linux文件权限基础知识
一.文件权限概述 Linux中每个文件或目录都有一组一组9个基础权限位,每三位字符被分为一组,他们分别是属主权限位(占三个字符).用户组权限位(占三个字符).其他用户权限位(占三个字符).比如rwxr ...
- 简单的搭载Spring cloud框架
大家不懂的可以在评论区给我留言
- [AcWing303/304]任务安排2/3
[AcWing303]任务安排2 有 \(N\) 个任务排成一个序列在一台机器上等待执行,它们的顺序不得改变.机器会把这 \(N\) 个任务分成若干批,每一批包含连续的若干个任务.从时刻 \(0\) ...
- 关于Oracle MAX()KEEP(DENSE_RANK LAST/FIRST ORDER BY ) 函数的使用分析
MAX()/MIN() KEEP(DENSE_RANK LAST/FIRST) 函数 解释: 1. max() 获取最大值: 2.min() 获取最小值; 3. keep 保持满足括号内条件的内容; ...
- 图论+思维(2019牛客国庆集训派对day2)
题意:https://ac.nowcoder.com/acm/contest/1107/J n个点的完全图编号0-n-1,第i个点的权值为2^i,原先是先手选取一些边,然后后手选取一些点,满足先手选取 ...