YAML学习
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学习的更多相关文章
- 【Yaml】Yaml学习笔记
转载:https://blog.csdn.net/moshenglv/article/details/52084899 YAML何许物也?在XML泛滥的情况下,YAML的出现的确让人眼前一亮,在初步学 ...
- 更适合Pythoner的标记语言Yaml学习总结
pythonic的标记语言 之前总结过一篇关于小数据存储文件大比拼,当时着重介绍了json,因为它在各类编程语言的通用性较强.但今天,我想给大家介绍一款更加适合pythoner使用的语言Yaml. Y ...
- Python Yaml 学习
最近开始使用Python3.x,所有今后无特殊说明,Python代表的就是Python3.x 最近在看代码时发现有人用Yaml —— Yet Another Markup Language :另一种标 ...
- Yaml学习文档
pdf文档地址 http://yaml.org/spec/ JS-Yaml demo地址 http://nodeca.github.io/js-yaml/
- Yaml学习笔录
YAML概要 [YAML](http://yaml.org/)是"YAML Ain't a Markup Language"(YAML不是一种置标语言)的递归缩写,早先YAML的意 ...
- 通过一篇YAML来学习YAML
yaml 兼容 json,至今已发展至 1.2版.支持N多种编程语言.官网:http://www.yaml.org/ 格式在线校验:http://nodeca.github.io/js-yaml/ 下 ...
- ansible-playbook的YAML语法学习
YAML:可以将你打算对多机器的批量操作放到一个文件中,顺序执行,可以根据机器做到根据机器信息判断执行,其他命令执行结果判断执行. YAML有着严格的层级要求,稍微有个缩进问题就会无法运行,所以学习过 ...
- Python Selenium Cookie 绕过验证码实现登录
Python Selenium Cookie 绕过验证码实现登录 之前介绍过博客园的通过cookie 绕过验证码实现登录的方法.这里并不多余,会增加分析和另外一种方法实现登录. 1.思路介绍 1.1. ...
- [k8s]一些技巧性的yaml和dockerfile-docker学习思路
我会把一些dockerfile和yaml的技巧性东西不定期搜集到这里 docker学习思路 三部曲: 1,vm会搭建服务 2,docker会跑服务 3,k8s集群会调度该服务 存储 vm1 vm2 共 ...
随机推荐
- Minitab系列 前言
Matlab 在有些时候太过去强大,强大到几乎所有的数学问题都可以解决. 在这里,Matlab就像数学版的Vim,对于一般的使用者还是不想编程,想要更加的直接直观的数学处理工具,这里向大家介绍mini ...
- HDU6124
Euler theorem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)T ...
- 【转】64位系统下无法使用libpam-mysql的md5
转自:http://superwf.dyndns.info/?p=331 Aug 23 09:05:57 wfoffice saslauthd[7235]: pam_mysql – non-crypt ...
- [20170627]使用TSPITR恢复表空间.txt
[20170627]使用TSPITR恢复表空间.txt --//RMAN提供了一种实现所谓TSPITR(Tablespace Point-In-Time Recovery)的技术,通过简单的一个语句, ...
- 通过DbVisualizer 工具运行DB2存储过程实现INSERT语句主键自增造数
1.需求简介 最近开发人员需要进行一批数据进行生产上SQL语句耗时过长问题的验证与优化.所以在性能测试库中批量建造数据,由于交易本身业务逻辑过于复杂以及需要各种授权,最后决定采用插表的方式完成. 2. ...
- MD5生成
/// <summary> /// 32位MD5加密 /// </summary> /// <param name="input"></p ...
- 百度纯CSS生成菜单
首页我们打看dreamweaver或其它编辑器,创建一个名为nav的导航菜单 <div class="nav"> <ul> <li><a ...
- 【PAT】B1068 万绿丛中一点红(20 分)
一开始因为看见这题就头疼,可费了点时间. 要考虑所有元素,如果忽略外圈元素,最后一个样例过不去. 而且要求只出现一次的元素, 我没有使用map,因为当时还没学,用map储存元素会节约好多代码 #inc ...
- Linux 小知识翻译 - 「别名」
实际上,「别名」被用在多种场合下.比如「命令的别名」,「邮件地址的别名」等等. 所以,单独说「别名」的时候,根据不用的场合,代表的意思也不一样. 一般来说,「别名」是指意思差不多的东西. 「别名」的英 ...
- ARC设置
XCode兼容ARC和非ARC代码的方法 在ARC开发模式下引用非ARC文件或库需进行如下操作以告诉编译器此代码需按照非ARC模式对待: XCode中项目文件->TARGETS->Comp ...