前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速了解 YAML

快速了解 YAML

作者头像
dys
发布2018-04-03 17:56:45
1.8K0
发布2018-04-03 17:56:45
举报
文章被收录于专栏:性能与架构性能与架构

什么是 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格式的,例如

代码语言:javascript
复制
Button: {name: button2, text: Button 2}

但YAML比JSON的可读性更好,例如

代码语言:javascript
复制
arr :
  - a:
        a1 : 1
        a2 :
            - 2
            - 3
  - b

比较好理解,arr 是一个数组,有 a 和 b 两个元素,其中 a 又包含两个元素,a2 是一个数组

JSON格式是这样的

代码语言:javascript
复制
{
    arr: [
        {
            a: {
                a1: 1,
                a2: [2, 3]
            }
        },
        'b'
    ]
}

大量的 {} 与 [] 嵌套很容易让人看不清楚

除了比JSON更好读,YAML还有更多的功能,后面介绍语法时可以看到

如何使用 YAML?

代码语言:javascript
复制
--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

映射关系

解析代码

代码语言:javascript
复制
Entry entry = Yaml.loadType(
 new File("ReceiptEntry.yml"), Entry.class);

YAML 基础语法

需要注意的是,YAML使用空格进行缩进,表达上下级关系,所以空格不是用来美化代码的,而是语法的一部分

对象

name : YAML

解析为JS对象:

代码语言:javascript
复制
{ name: 'YAML' }
User : 
    name : Bill
    age : 30

解析为JS对象:

代码语言:javascript
复制
{ User: { name: 'Bill', age: 30 } }

数组

- a

- b

- c

解析为JS对象:

代码语言:javascript
复制
[ 'a', 'b', 'c' ]
items:
    - id: 1
      price: 1.1
    - id: 2
      price: 2.2

解析为JS对象:

代码语言:javascript
复制
{ 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: '保留换行符\n\n\n', 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/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 对象
  • 数组
  • 字符串
  • 引用
  • 强制类型转换
  • 注释
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档