快速了解 YAML
什么是 YAML?
YAML 是一个数据序列化的标准,适用于所有开发语言,最大的特点是可读性好
YAML 的一个主要应用方向就是编写配置文件,有非常多的系统和框架采用YAML进行配置
示例
title : yaml test
date : 2016/08/06
content : hello yaml
这就是一个最简单的YAML文件,非常好理解
YAML 对比 XML/JSON
从示例可以看出 YAML 和 XML/JSON 比较类似,那么他们的关系是什么呢?
XML由大量标签构成,YAML则轻便很多,但没有DTD概念,不能像XML那样验证数据格式
对于YAML和XML,可以简单的理解为:
XML很啰嗦,YAML简洁清晰,好理解,但XML的啰嗦也是有好处的,便于验证数据
YAML中也是支持JSON格式的,例如
Button: {name: button2, text: Button 2}
但YAML比JSON的可读性更好,例如
arr :
- a:
a1 : 1
a2 :
- 2
- 3
- b
比较好理解,arr 是一个数组,有 a 和 b 两个元素,其中 a 又包含两个元素,a2 是一个数组
JSON格式是这样的
{
arr: [
{
a: {
a1: 1,
a2: [2, 3]
}
},
'b'
]
}
大量的 {} 与 [] 嵌套很容易让人看不清楚
除了比JSON更好读,YAML还有更多的功能,后面介绍语法时可以看到
如何使用 YAML?
--JS
<script src="esprima.js"></script>
<script src="js-yaml.min.js"></script>
<script type="text/javascript">
var doc = jsyaml.load('greeting: hello');
</script>
--Node.js
yaml = require('js-yaml');
fs = require('fs');
try {
var doc = yaml.safeLoad(fs.readFileSync('/home/example.yml', 'utf8'));
console.log(doc);
} catch (e) {
console.log(e);
}
--JAVA
JYaml库的官方示例
date: 11/29/2005
receipts:
- store: ken stanton music
category: entertainment
description: saxophone repair
total: 382.00
- store: walmart
category: groceries
total: 14.26
映射关系
解析代码
Entry entry = Yaml.loadType(
new File("ReceiptEntry.yml"), Entry.class);
YAML 基础语法
需要注意的是,YAML使用空格进行缩进,表达上下级关系,所以空格不是用来美化代码的,而是语法的一部分
对象
name : YAML
解析为JS对象:
{ name: 'YAML' }
User :
name : Bill
age : 30
解析为JS对象:
{ User: { name: 'Bill', age: 30 } }
数组
- a
- b
- c
解析为JS对象:
[ 'a', 'b', 'c' ]
items:
- id: 1
price: 1.1
- id: 2
price: 2.2
解析为JS对象:
{ items:[
{ id: 1, price: 1.1 },
{ id: 2, price: 2.2 }
] }
字符串
字符串可以不使用引号,直接写
str : hello world
如果包含特殊字符(如 :),就要放在引号中
str : '包含: abc'
字符串可以写成多行,换行符会被解析为空格,如
str: 我
是
谁
解析为JS对象:
{ str: '我 是 谁' }
如果想保留换行符,需要使用符号 '|'
str: |
我
是
谁
解析为JS对象:
{ str: '我n是n谁n' }
多行字符串末尾的换行符可以选择保留或者删除,例如
str1: |+
保留换行符
str2: |-
删除换行符
解析为JS对象:
{ str1: '保留换行符nnn', str2: '删除换行符' }
+ 保留末尾的换行
- 删除末尾的换行
引用
sign: &sign
name: Gates
email: g@a.com
A:
content: aaa
<<: *sign
B:
content: bbb
<<: *sign
解析为JS对象:
{ sign: { name: 'Gates', email: 'g@a.com' },
A: { content: 'aaa', name: 'Gates', email: 'g@a.com' },
B: { content: 'bbb', name: 'Gates', email: 'g@a.com' } }
& 用来建立锚点(sign)
<< 表示合并到当前数据
* 用来引用锚点
强制类型转换
num: !!str 123
解析为JS对象:
{ num: '123' }
!! 表示类型转换,后面跟上要转换的类型
注释
# key: value
Block: Kiki
# 表示注释
资源推荐
YAML官网
http://www.yaml.org/
yaml-js 即时解析工具
http://nodeca.github.io/js-yaml/
- WebSocket在ASP.NET MVC4中的简单实现
- 在ASP.NET MVC中使用Unity进行依赖注入的三种方式第一种方法第二种方法第三种方法
- Unity Container中的几种注册方式与示例1.实例注册2.简单类型注册
- 使用Unity创建依赖注入依赖注入生命周期:注册、解析、销毁 注册解析销毁
- 使用WCF进行跨平台开发之三(JAVA调用WCF服务)1.开发必备2.生成WCF客户端3.开发程序4.结束语
- 使用WCF进行跨平台开发之二(IIS托管WCF服务并使用php平台调用)1.系统必备2.在IIS中托管WCF服务3.使用PHP调用托管在IIS中的WCF服务
- 使用WCF进行跨平台开发之一(WCF的实现、控制台托管与.net平台的调用)1.创建项目结构2.契约的设计3.实现服务4.控制台托管服务5.在.net平台中调用WCF
- 使用GUI工具高效构建你自己的Nuget包丰富包的基础信息添加要包含的文件The end
- 网页结构与表现原则
- CSS3动画功能
- Angular开发者手册重点翻译之指令(一)文本和属性绑定ngAttr属性绑定
- CSS3中的变形处理
- WCF中操作的分界于调用顺序和会话的释放操作分界实例停止
- WCF中数据契约之已知类型的几种公开方式代码中定义配置中定义宿主端使用解析器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Hystrix仪表盘
- Centos7 Nginx的SSL证书安装
- 算法集锦(11)| 自动驾驶 | 基于HOG和SVM的车辆识别算法
- 剑指offer(一):找出数组中重复的数字
- 剑指offer(二):不修改数组找出重复的数字
- 漫画:什么是树状数组?
- poiAndEasyExcel学习(五)
- 两分钟真能搞懂桶排序
- SpringMVC文件上传下载
- 学弟不懂原码反码补码,气的我给女朋友讲了一夜
- 使用 HanLP 统计二元语法中的频次
- 算法集锦(13)|自然语言处理| Python代码的语义搜索引擎创建
- 特征锦囊:彻底了解一下WOE和IV
- Nginx专辑|05 -如何使用Nginx配置正向代理
- 详解 SIGHAN05 的目录结构