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!的更多相关文章

  1. 刚学会 C++ 的小白用这个开源框架,做个 RPC 服务要多久?

    本文适合有 C++ 基础的朋友 本文作者:HelloGitHub-Anthony HelloGitHub 推出的<讲解开源项目>系列,本期介绍基于 C++ 的 RPC 开源框架--rest ...

  2. SpringBoot中yaml配置对象

    转载请在页首注明作者与出处 一:前言 YAML可以代替传统的xx.properties文件,但是它支持声明map,数组,list,字符串,boolean值,数值,NULL,日期,基本满足开发过程中的所 ...

  3. C#与yaml解析

    YAML 官方网站称 YAML 是"一种所有编程语言可用的友好的数据序列化标准".YAML Ain't Markup Language,和GNU一样,YAML是一个递归着说&quo ...

  4. 雅美尓(yaml)实战

    献给跟我一样对yaml(雅美尓)有婶婶挫败感的同学! 开始第一个pylon工程,我们就跟yaml配置文件开始了不解之缘.yaml是什么?它有哪些规则? 大IBM的文章如是说:YAML 是一种比 XML ...

  5. YAML 技术研究

    YAML预研文档 YAML概要 YAML是"YAML Ain't a Markup Language"(YAML不是一种置标语言)的递归缩写,早先YAML的意思其实是:" ...

  6. python yaml使用

    YAML Ain't Markup Language 和GNU一样,YAML是一个递归着说“不”的名字.不同的是,GNU对UNIX说不,YAML说不的对象是XML. YAML不是XML. 为什么不是X ...

  7. 【Yaml】Yaml学习笔记

    转载:https://blog.csdn.net/moshenglv/article/details/52084899 YAML何许物也?在XML泛滥的情况下,YAML的出现的确让人眼前一亮,在初步学 ...

  8. PHP 与 YAML

    PHP 与 YAML 这一段时间都没有写blog,并不是因为事情多,而是自己变懒了.看到新技术也不愿意深入思考其背后的原理,学习C++语言了近一个多月,由于学习方法有问题,并没有什么项目可以练手.靠每 ...

  9. YAML文件简介

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

随机推荐

  1. SQL易错锦集

    1.LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句,一般 DBA 想到的办法是在 type, name, create_time 字段上加组合索引 ...

  2. SQL Pretty Printer for SSMS 很棒的格式化插件

    SQL Pretty Printer for SSMS 很不错的SQL格式化插件   写SQL语句或者脚本时,看到凌乱的格式就头大了,于是决心找一款SQL语句格式化的工具. 功夫不负有心人还真的被我找 ...

  3. Synchronized与Lock的区别与应用场景

    转载. https://blog.csdn.net/fly910905/article/details/79765381 同步代码块,同步方法,或者是用java提供的锁机制,我们可以实现对共享资源变量 ...

  4. Java基础 面试总结(一)

    一.java基础篇-概念 1.简述你所知道的Linux: Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是主流的服务器操作系统, 广泛应用于互联网.云计算.智能手机( ...

  5. JZOJ.1150【贪心算法】IQ

    欢迎转载,请附上原链接https://www.cnblogs.com/Code-Garden/p/11276741.html(也没人会看) 一道对我来说较难的贪心题 题目描述 根据世界某权威学会的一项 ...

  6. VUE前后台分离

    VUE前后台分离 配置js环境 jQuery >: cnpm install jquery vue/cli 3 配置jQuery:在vue.config.js中配置(没有,手动项目根目录下新建) ...

  7. 【spring boot】3.spring boot项目,绑定资源文件为bean并使用

    整个例子的结构目录如下: 1.自定义一个资源文件 com.sxd.name = 申九日木 com.sxd.secret = ${random.value} com.sxd.intValue = ${r ...

  8. JS实现带省略号的长分页显示

    // 刷新|生成分页信息 function refreshPageInfo(data, pageIndex) { var pageSize = data.pageCount pagingInfo.ht ...

  9. Scala学习六——对象

    一.本章要点 用对象作为但例或存放工具的方法 类可以拥有一个同名的伴生对象 对象可以扩展类或特质 对象的apply方法通常用来构造伴生类的新实例 如果不想显示定义main方法,可以扩展App特质的对象 ...

  10. NetScaler循环抓包设置

    NetScaler循环抓包设置 来源 https://raynorli.com/2018/07/01/netscaler-nstrace-cycling-capture/ 参考文档 How to Re ...