当前位置: 首页 > 编程日记 > 正文

YAML 语言入门教程

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

YAML简介

另一种标记语言(Yet Another Markup Language)

YAML(英语发音:/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达资料序列的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。Clark Evans在2001年首次发表了这种语言[1],另外Ingy döt Net与Oren >Ben-Kiki也是这语言的共同设计者[2]。目前已经有数种编程语言或脚本语言支援(或者说解析)这种语言。 ——维基百科

YAML 仍然是一门标记性语言,但为了强调这门语言以数据为中心,而不是以标记语言为中心。采用反向缩略语重新命名。

基本语法规则:

  1.大小写敏感2.使用缩进表示层级关系3.不允许使用TAB键来缩进,只允许使用空格键来缩进4.缩进的空格数量不重要5.使用"#"来表示注释

支持的数据格式:

 1.对象:键值对的集合,又称映射(mapping) / 哈希(hashes)/ 字典(dictionary)2.数组: 一组按次序排列的值,又称序列(sequence) / 列表(list)3.纯量(scalars):单个的,不可再分的值

以下分别介绍这三种数据格式

对象

对象的一组键值对,是用冒号结构来表示

animal: pets

转为JavaScript

{ animal: 'pets' }

YAML也支持另一种写法,将所有的键值对写成一个行内对象

hash: { name: steve, foo: bar }

转为JavaScript

{ hash: { name: 'steve', foo: 'bar'}}

数组

一组连词线开头的行,构成一个数组

- Cat
- Dog
- Goldfish

转为JavaScript

[ 'Cat', 'Dog', 'Goldfish' ]

数据的子结构也是一个数组,可以在该项下面缩进空格来表示层级关系

-- Cat- Dog- Goldfish

转为JavaScript

[ [ 'Cat', 'Dog', 'Goldfish'] ]

数组也可以采用行内表示法

animal: [Cat, Dog]

转为JavaScript

{ animal: ['Cat', 'Dog']}

复合结构

对象和数组可以结合使用,形成复合结构

languages:- Ruby- Perl- Python
websites:YAML: yaml.orgRuby: ruby-lang.orgPython: python.orgPerl: user.perl.org

转为JavaScript

{languages: [ 'Ruby', 'Perl', 'Python'],websites:{YAML: 'yaml.org',Ruby: 'ruby-lang.org',Python: 'python.org',Perl: 'user.perl.org'}
}

纯量

纯量是最基本的、不可再分的值。 以下数据类型都是javaScript的纯量。

 - 字符串- 布尔值- 整数- 浮点数- null- 时间- 日期

数值直接以字面量的形式表示

number: 12.30

转为JavaScript

{ number: 12.30 }

布尔值以true 和false 来表示

isSet: true

转为JavaScript

{ isSet: true }

null用 ~ 表示

parent: ~

转为JavaScript

{ parent: null }

时间用 ISO8601 格式

iso8601: 2001-12-14t21:59:43.10-05:00

转为JavaScript

{ iso8601: new Date('2001-12-14t21:59:43.10-05:00') }

日期采用复合 ISO8601 格式的年、月、日表示

 date: 1976-12-20

转为JavaScript

{ date: new Date('1976-12-20') }

YAML 允许使用两个感叹号,强制转换数据类型

 e: !!str 123f: !!str true

转为JavaScript

{ e: '123', f: 'true'}

字符串

字符串是最常见,也是最复杂的一种数据类型。 字符串默认不适用引号表示。

str : 这是一行字符串

转为JavaScript

{ str: '这是一行字符串'}

如果字符串之间存在空格或其他特殊字符,需放在单引号之中。

str: '内容: 字符串'

转为JavaScript

{ str: '内容: 字符串'}

单引号和双引号都可以使用,双引号不会对特殊字符进行转义。

s1: '内容\n字符串'
s2: "内容\n字符串"

转为JavaScript

{ s1: '内容\\n字符串', s2: '内容\n字符串'}

单引号之中如果还有单引号,必须连续使用两个单引号进行转义

str: 'labor''s day'

转为JavaScript

{ str: 'labor\'s day'}

字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格。

str: 这是一段多行字符串

转为JavaScript

{ str: '这是一段 多行 字符串'}

多行字符串可以采用 | 保留换行符,也可以使用 > 折叠换行。

this: |FooBar
that: >FooBar

转为JavaScript

{ this: 'Foo\nBar\n', that:'Foo Bar\n' }

“ + ” 表示保留文字块末尾的换行,-表示删除字符串末尾的换行。

s1: |Foos2: |+Foos3: |-Foo

转为JavaScript

{ s1: 'Foo\n', s2: 'Foo\n\n\n', s3:'Foo' }

字符串之中可以插入 HTML 标记

message: |<p style="color: red">段落</p>

转为JavaScript

{ message: '\n<p style="color: red">\n 段落\n</p>\n' }

引用

锚点 & 和别名 * , 可以用来引用

defaults: &defaultsadapter: postgreshost: localhostdevelopment:database: myapp_development,<<: *defaultstest:database: myapp_test,<<: *defaults

相当于

defaults: adapter: postgreshost: localhostdevelopment:database: myapp_development,adapter: postgreshost: localhosttest:database: myapp_test,adapter: postgreshost: localhost

&用来建立锚点(defaults),<<表示合并到当前数据,*用来引用锚点。

下面另外一个例子

- &showell Steve 
- Clark 
- Brian 
- Oren 
- *showell

转为JavaScript

[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]

函数和正则表达式的转换

这是js-yaml库特有的功能,可以把函数和正则表达式转为字符串

#exmaple.yml
fn: function() { return 1 }
reg: /test/

解析上面的yml文件代码如下:

var yaml = require('js-yaml');
var fs = require('fs');
try{var doc = yaml.load(fs.readFileSync('./example.yml', 'utf8'));
} catch(e){console.warn(e);
}

从javaScript对象还原到yaml代码如下:

 var yaml = require('js-yaml');var fs = require('fs');var obj = {fn: function() { return 1 },reg: /test/}try{fs.writeFileSync('./exmaple.js', yama.dump(obj), 'utf8')} catch(e) {console.log(e);}

参考链接

  • YAML 1.2 规格
  • YAML from Wikipedia
  • YAML for Ruby

转载于:https://my.oschina.net/wuweixiang/blog/1841203

相关文章:

我翻译的一篇文章,OO设计中对象的创建和使用

OO设计中对象的创建和使用 转载于:https://www.cnblogs.com/lishu1980/archive/2006/06/22/432526.html

SQL Server Profiler工具

SQL Server Profiler工具 原文:SQL Server Profiler工具一、SQL Profiler工具简介 SQL Profiler是一个图形界面和一组系统存储过程&#xff0c;其作用如下&#xff1a; 图形化监视SQL Server查询&#xff1b;在后台收集查询信息&#xff1b;分析性能&#xff1b;诊断像死锁之类…

Nginx—核心配置location匹配规则说明

2019独角兽企业重金招聘Python工程师标准>>> location介绍 location指令是Nginx中最核心的一项配置&#xff0c;根据预先定义的URL匹配规则来接收用户发送的请求&#xff0c;根据匹配结果&#xff0c;将请求转发到后台服务器、非法的请求直接拒绝并返回403&#xff…

Windows Live Messenger  正式版已经发布

Windows Live Messenger 正式版已经发布!这是新一代的 Messenger。它拥有全新的名字&#xff0c;可以免费下载。并且除了延续使用原 Messenger 的全部功能外&#xff0c;它还提供了几种出色的全新交流方式&#xff0c;实现与朋友的即时共享和交流。转载于:https://www.cnblogs.…

关闭ubuntu启动时System Program Problem Detected提示

修改vi /etc/default/apport 将其值设置1-->0转载于:https://www.cnblogs.com/snail-micheal/p/3607969.html

C++开源跨平台类库集

在如下的库支持下&#xff0c;开发的系统可以很方便移植到当前大部分平台上运行而无需改动&#xff0c;只需在对应的平台下 用你喜欢的编译器 重新编译即可 经典的C库 STLport-------SGI STL库的跨平台可移植版本&#xff0c;在以前有些编译器离符合 标准比较远的情况…

僵尸进程和孤儿进程

一 . 僵尸进程: 子进程退出&#xff0c;父进程没有回收子进程资源&#xff08;PCB&#xff09;&#xff0c;则子进程变成僵尸进程 处理僵尸进程的方法&#xff1a;wait 和 waitpid 调用wait和waitpid不仅可以获得子进程的终止信息&#xff0c;还可以使父进程阻塞等待子进程终止…

Castle ActiveRecord(一)概述

一、ActiveRecord与Castle ActiveRecordActiveRecord是《Patterns of Enterprise Application Architecture》中描述的著名模式。基本上&#xff0c;当实例每一行的时候&#xff0c;所有的静态方法会作用于全部纪录。 Castle ActiveRecord 是ActiveRecord 模式的一个实现&am…

一步步学习SPD2010--第十一章节--处理母版页(8)--从母版页创建网页

一步步学习SPD2010--第十一章节--处理母版页&#xff08;8&#xff09;--从母版页创建网页 在SPD中&#xff0c;你可以使用许多不同的方法创建ASP.NET页面。然而&#xff0c;因为页面将是SP网站的一部分&#xff0c;你很可能想像其他页面一样&#xff0c;保持相同的导航元素和外…

Confluence 6 查看空间活动

空间活动信息是默认禁用&#xff08;disabled by default&#xff09;的。活动&#xff08;Activity&#xff09;的标没有显示&#xff0c;如果你的 Confluence Usage Stats 插件没有启用的。请查看下面的说明&#xff1a; 如果启用的话&#xff0c;空间活动界面显示了每一个空…

flash模拟EEROM

FLASH中&#xff1a;0x08000000--0x08000000SIZE保存的是用户代码 Rule&#xff1a; 16位为传输单位 读数据&#xff1a; u16 STMFLASH_ReadHalfWord(u32 faddr) 可以在通用地址空间直接寻址&#xff1a;data*(vu16*)ADDR;[ADDR为32位数据&#xff0c;指向的数据为uv16型]写数据…

OSChina 周六乱弹 —— 就少个接吻的女友了

2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单&#xff08;2018&#xff09;请戳&#xff08;这里&#xff09; 【今日歌曲】 andonny &#xff1a;分享Mamas & The Papas的单曲《California Dreaming》 《California Dreaming》- Mamas & The …

存儲過程解密SQL

存儲過程解密SQLif exists (select * from dbo.sysobjects where id object_id(N[dbo].[sp_decrypt]) and OBJECTPROPERTY(id, NIsProcedure) 1)drop procedure [dbo].[sp_decrypt]GO /*--破解函數,視圖,程儲過程,触發器,限于SQLSERVER2000 --作者:J9988--*//*--使用示例 --解…

软件缺陷生命周期图示及当中涉及到的缺陷的状态

缺陷状态&#xff1a; 激活/打开 已修正 已关闭/非激活 重新打开(对应图示验证通过否N) 推迟(对应图示的延期) 保留(对应图示无法解决) 不能重现 需要更多信息

Adding a QR Code Reader in Flex on Android

<?xml version"1.0" encoding"utf-8"?> <s:View xmlns:fx"http://ns.adobe.com/mxml/2009" xmlns:mx"library://ns.adobe.com/flex/mx"xmlns:s"library://ns.adobe.com/flex/spark" title"HomeView"&g…

41-高级路由:BGP AS长度:接收一切、最大AS长度、不比较AS长度

一、实验拓扑&#xff1a;二、实验要求&#xff1a;1、R4配置同上个实验&#xff1b;2、R3配置接收的路由包含最大AS长度为4&#xff1b;3、R3配置隐藏命令&#xff0c;不比较AS长度&#xff1b;4、R5配置不管收到的路由有没有包含本地AS都收入&#xff08;之前R4已经配置了4.4…

利用动态加载模板,配合ajax实现无刷新操作

关键字&#xff1a;DataGrid 动态模板 Ajax我们使用ajax实现无刷新界面时&#xff0c;对于DataGrid&#xff0c;Repeater等列表还是比较麻烦的&#xff0c;经过我的尝试&#xff0c;找出一种比较合理的方法&#xff0c;可以免除对html的加工处理&#xff0c;随时获取到数据列表…

如何利用业余时间提升自己

1、要找到心动的目标 先要找到自己如果提升哪一方面的能力&#xff0c;能够对自己的工作有较大的贡献 找到你想成为的人 你从他身上找到你想拥有的技能 你喜欢某个人的身上的某种行为表现 也是你的榜样 或者从你的爱好着手发现你在爱好中能够得到提升的点 我想发展的工作技能是…

Eclipse插件的安装方法

转自&#xff1a;http://blog.csdn.net/zhangyabinsky/article/details/7043435 Eclipse插件的安装有两种方法 &#xff1a;一个是在线安装&#xff0c;另一个就是手动安装。 在线安装比较简单&#xff1a;点击Help>>Install New Software..如图&#xff1a; 这样会跳出一…

(转)uml 静态视图依赖

依赖 依赖表示两个或多个模型元素之间语义上的关系。它只将模型元素本身连接起来而不需要用一组实例来表达它的意思。它表示了这样一种情形&#xff0c;提供者的某些变化会要求或指示依赖关系中客户的变化。 根据这个定义&#xff0c;关联和泛化都是依赖关系&#xff0c;但是它…

白盒测试各种“覆盖”间的拓扑关系及白盒用例常用要求

SC为语句覆盖 DC为分支覆盖/判定覆盖 CC为条件覆盖 CDC为判定-条件覆盖 MCC为条件组合覆盖 MC/DC修正条件/判定覆盖 BPC为基本路径覆盖

[转]实战 SQL Server 2008 数据库误删除数据的恢复

实战 SQL Server 2008 数据库误删除数据的恢复 关键字&#xff1a;SQL Server 2008, recover deleted records 今天有个朋友很着急地打电话给我&#xff0c;他用delete语句误删除了SQL Server 2008数据库中两个表中的所有记录&#xff0c;而这个数据库之前没有任何备份。让我帮…

水面加上了Perlin Noise

通过用躁点扰动法线图&#xff0c;水面显得更有质感Real time Shadow 转载于:https://www.cnblogs.com/badkeeper/articles/495443.html

事件冒泡和阻止事件冒泡

事件冒泡 当事件发生后&#xff0c;这个事件就要开始传播(从里到外或者从外向里)。为什么要传播呢&#xff1f;因为事件源本身&#xff08;可能&#xff09;并没有处理事件的能力&#xff0c;即处理事件的函数&#xff08;方法&#xff09;并未绑定在该事件源上。例如我们点击一…

不使用powerdesigner手工绘制用例图例题详解

文章目录1.题目2.分析过程3.结果4.需要注意的细节5.本题易错的地方1.题目 根据以下场景绘制用例图。 某公司预开发一个反馈系统作为其CRM&#xff08;客户关系管理&#xff09;的一部分。系统基本功能描述如下&#xff1a; &#xff08;1&#xff09;客户可通过B/S系统在该公司…