YAML学习

一:什么是YAML?
YAML是专门用来写配置文件的语言,通过它来编写完成后,我们可以通过插件JS-YAML(https://github.com/nodeca/js-yaml)来转换成我们的json数据。

二:有如下基本语法规则:

1 大小写敏感
2 使用缩进表示层级关系
3 缩进时相同层级的元素左侧对齐即可
4 使用 "#" 来表示注释。

支持的数据格式如下:

1. 对象:键值对的集合。
2. 数组:
3. 纯量;单个的,不可再分的值

2.1 对象
对象是由一组键值对组成,是使用冒号结构来表示;如下:

name: kongzhi

它会被转为如下的json数据:

{ name: 'kongzhi' }

假如我现在的项目目录如下结构:

### 目录结构如下:
demo # 工程名
| |--- index.js
| |--- index.yaml
| |--- package.json

index.yaml 代码如下:
name: kongzhi

index.js 代码如下:

const yaml = require('js-yaml');
const fs = require('fs'); const doc = yaml.safeLoad(fs.readFileSync('./index.yaml', 'utf-8')); console.log(doc);

执行命令 node index.js 就可以打印出
{ name: 'kongzhi' }

YAML也允许如下写法,将所有键值对写成一个行内对象;如下:

obj: { name: kongzhi, age: 30 }

转为js就变成如下:
{ obj: { name: 'kongzhi', age: 30 } }

2.2 数组:
一组以横线开头的行,构成一个数组。 如下代码:

- kongzhi
- longen
- tugenhua

转为js变为如下:
[ 'kongzhi', 'longen', 'tugenhua' ]

嵌套数组:

对数组可以嵌套数组,比如 [['kongzhi', 'longen', 'tugenhua']] 这样的。可以如下代码:

-
- kongzhi
- longen
- tugenhua

对象嵌套数组:

比如如下代码:

obj:
- kongzhi
- longen
- tugenhua

就会转为为成:

{ obj: [ 'kongzhi', 'longen', 'tugenhua' ] }

这样的。

数组也可以嵌套对象, 比如如下这样的:

-
{ name: kongzhi, age: 30 }

或

-
name: kongzhi
age: 30

转为js,变为如下:
[ { name: 'kongzhi', age: 30 } ]

如果多个数组的话,如下这种写法是可以的;
[
  { name: kongzhi, age: 30 },
  { name: kongzhi, age: 30 }
]

或者如下这样的:

- name: kongzhi
- name: longen0707
- name: tugenhua

就会转化成如下这样的:

[
{ name: 'kongzhi' },
{ name: 'longen0707' },
{ name: 'tugenhua' }
]

2.3 纯量
纯量是最基本的,不可再分的值,以下数据类型都属于javascript的纯量。

字符串,布尔型,整数,浮点数,Null, 时间, 日期等

1. 字符串

字符串默认不使用引号表示。如下:
str: 空智

转为js变为如下:
{ str: '空智' }

但是如果字符串中包含空格或特殊字符,需要使用引号;如下所示:
str: '空智: 123'

转为js变为如下:
{ str: '空智: 123' }

如果不使用引号就会报错的。

单引号中如果还有单引号,需要使用单引号进行转义,比如:
name: I am Tom's

需要写成如下:
name: 'I am Tom''s'

最后会转成 如下这样的:
{ name: 'I am Tom\'s' }

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

name: 这是一段
多行
字符串

转换成js变为如下:

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

保留换行符 和 折叠换行

多行字符串可以使用 | 保留换行符,使用 > 折叠换行;如下代码:

name: |
kongzhi
longen0707
age: >
kongzhi
longen0707

转为js变为如下:

{ name: 'kongzhi\nlongen0707\n', age: 'kongzhi longen0707\n' }

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

如下代码:

name1: |
kongzhi name2: |+
longen0707 name3: |-
tugenhua

转为js变为如下:

{
name1: 'kongzhi\n',
name2: 'longen0707\n\n\n\n',
name3: 'tugenhua'
}

字符串中插入HTML标记

如下代码:

name: |
<div style="color:blue">
xxx
</div>

转为js变为如下:

{ name: '<div style="color:blue">\n  xxx\n</div>\n' }

2. 布尔型:
布尔值是使用true和false表示;如下代码:
isFlag: false

转换成js变为如下:

{ isFlag: false }

其中 null 使用 ~ 表示; 如下代码:
obj: ~
转为js变为如下:

{ obj: null }

3. 引用
锚点 & 和 别名 *, 可以用来引用,& 是用来建立锚点,<< 表示合并到当前数据,* 是用来引用锚点。 如下代码:

objects: &objects
name: kongzhi
age: 30 object2:
name: longen0707
<<: *objects object3:
name: tugenhua
<<: *objects

转换为js变为如下:

{
objects: { name: 'kongzhi', age: 30 },
object2: { name: 'longen0707', age: 30 },
object3: { name: 'tugenhua', age: 30 }
}

详情demo 请看 http://nodeca.github.io/js-yaml/

YAML学习的更多相关文章

  1. 【Yaml】Yaml学习笔记

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

  2. 更适合Pythoner的标记语言Yaml学习总结

    pythonic的标记语言 之前总结过一篇关于小数据存储文件大比拼,当时着重介绍了json,因为它在各类编程语言的通用性较强.但今天,我想给大家介绍一款更加适合pythoner使用的语言Yaml. Y ...

  3. Python Yaml 学习

    最近开始使用Python3.x,所有今后无特殊说明,Python代表的就是Python3.x 最近在看代码时发现有人用Yaml —— Yet Another Markup Language :另一种标 ...

  4. Yaml学习文档

    pdf文档地址 http://yaml.org/spec/ JS-Yaml demo地址 http://nodeca.github.io/js-yaml/

  5. Yaml学习笔录

    YAML概要 [YAML](http://yaml.org/)是"YAML Ain't a Markup Language"(YAML不是一种置标语言)的递归缩写,早先YAML的意 ...

  6. 通过一篇YAML来学习YAML

    yaml 兼容 json,至今已发展至 1.2版.支持N多种编程语言.官网:http://www.yaml.org/ 格式在线校验:http://nodeca.github.io/js-yaml/ 下 ...

  7. ansible-playbook的YAML语法学习

    YAML:可以将你打算对多机器的批量操作放到一个文件中,顺序执行,可以根据机器做到根据机器信息判断执行,其他命令执行结果判断执行. YAML有着严格的层级要求,稍微有个缩进问题就会无法运行,所以学习过 ...

  8. Python Selenium Cookie 绕过验证码实现登录

    Python Selenium Cookie 绕过验证码实现登录 之前介绍过博客园的通过cookie 绕过验证码实现登录的方法.这里并不多余,会增加分析和另外一种方法实现登录. 1.思路介绍 1.1. ...

  9. [k8s]一些技巧性的yaml和dockerfile-docker学习思路

    我会把一些dockerfile和yaml的技巧性东西不定期搜集到这里 docker学习思路 三部曲: 1,vm会搭建服务 2,docker会跑服务 3,k8s集群会调度该服务 存储 vm1 vm2 共 ...

随机推荐

  1. 2018-01-19 Xtext试用: 5步实现一个(中文)JVM语言

    续上文Xtext试用: 快速实现简单领域专用语言(DSL). 基于官方教程: Five simple steps to your JVM language 达成如下语言: 它被Quan6JvmMode ...

  2. struts2文件上传大小限制问题小结(引用)

    最后解决办法: 页面js控制上传文件的大小,在页面进行控制.如下代码 inputs是所有文本上传input DOM //名称信息 var nameStr=''; //大小信息 var sizeStr= ...

  3. Sharepoint 2013 Gatherer 数据库的架构版本低于此 Gatherer 应用程序支持的向后兼容的最低架构版本

    管理中心 ->升级和迁移 ->查看数据库状态 解决方法: 开始-运行(以管理员身份运行),输入如下命令. cd  C:\Program Files\Common Files\Microso ...

  4. Kotlin入门(4)声明与操作数组

    上一篇文章介绍了基本变量类型在Kotlin中的用法,不过这只针对单个变量,如果要求把一组相同类型的变量排列起来,形成一个变量数组,那又该如何声明和操作呢? 在Java中声明数组,跟在C语言中声明是一样 ...

  5. OneAPM大讲堂 | Java 异常日志记录最佳实践

    [编者按]本文作者是 Casey Dunham.Casey 是一位具有 10 多年经验的专业软件开发人员,以其独特的方式应对应用安全问题而闻名.本文系国内 ITOM 管理平台 OneAPM 工程师编译 ...

  6. [20171206]rman与truncate.txt

    [20171206]rman与truncate.txt --//昨天下班在回家的路上,突然想起以前遇到的问题,就是truncate表后,rman做备份时会备份多少truncate表的信息,--//当时 ...

  7. asp.net mvc中的后台验证

    asp.net mvc的验证包含后台验证和前端验证.后台验证主要通过数据注解的形式实现对model中属性的验证,其验证过程发生在model绑定的过程中.前端验证是通过结合jquery.validate ...

  8. 第五章 绘图基础(DEVCAPS1)

    获取设备环境的信息 //DEVCAPS1.C--Device Capabilities Display Program No.1 (c) Charles Petzold, 1998 #include ...

  9. 02LaTeX学习系列之---TeX环境的搭建

    目录 02Latex的下载与安装及其编译IDE 目录 前言 (一)Tex Live的下载 1. Tex Live官方下载网站: (二)TeXStudio 1.TeXStudio官网下载 2.TeXSt ...

  10. popen()/pclose()阻塞性问题验证

    背景: popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程.这个管道必须由pclose()函数关闭,而不是fclose()函数. pclos ...