什么是YAML

278 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

设计目标

  • YAML易于人类阅读。
  • YAML数据可在编程语言之间移植。
  • 适合描述程序所使用的数据结构,特别是脚本语言
  • 丰富的表达能力与可扩展性
  • YAML易于实现和使用。

YAML 和 XML 、JSON

YAML 和 JSON

区别

  • JSON的首要设计目标是简单性和通用性。因此,JSON的生成和解析非常简单,但代价是人类可读性降低。
  • YAML的首要设计目标是人类可读性。因此,YAML允许可读性强的文件,但是生成和解析起来更复杂。

联系

  • JSON 是 YAML 的子集。

YAML 和 XML

  • 尽管这两种语言实际上可能在多个应用程序领域竞争,但是它们之间没有直接关联。
  • YAML 从 XML 中借鉴了很多,是综合 XML 和其他技术的成果。

基本语法

在线测试网址

大小写敏感

示例:

  1. 我们定义了两个 test key,
test:
   h1: 1
test:

结果报如下错误:

duplicated mapping key at line 9, column -5:
    test:
    ^
  1. 当我们把 test 变成 Test的时候,结果正常显示。
test:
   h1: 1
Test:

转换成 JavaScript 格式如下:

test: { h1: 1 },
  Test: null,

使用缩进表示层级关系

下面我们通过例子来演示什么是如何表达正确的层级关系:

  1. 两层:
test:
   h1: 1
   h2: 2

响应结果:

{ test: { h1: 1, h2: 2 }
  1. 三层
test:
   h1: 
    h2: 2

转换成 JavaScript 格式如下:

{ test: { h1: { h2: 2 } }
  1. 错误的层级关系
test:
   h1: 
  h2: 2

响应结果

bad indentation of a mapping entry at line 9, column 3:
      h2: 2

缩进时不允许使用Tab键,只允许使用空格

当我们使用 Tab 键进行缩进时,会报如下错误:

bad indentation of a mapping entry at line 9, column 4:
      	h2: 2

缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

上面例子说明,当元素左对齐的时候,就是同一层级的元素。

# 表示注释,从这个字符一直到行尾,都会被解析器忽略

test:
   h1: 1 # 这个是注释

转换成 JavaScript 格式如下:

{ test: { h1: 1 })

字符串可以不用引号标注,如果字符串中包含空格或特殊字符,需要放在引号中

普通字符串不需要引号标注

test:
   h1: 字符串
   

转换成 JavaScript 格式如下:

{ test: { h1: '字符串' }}

如果包含空格或特殊字符,需要放在引号之中。

test:
   h1: '字符串1 字符串2' 
   

转换成 JavaScript 格式如下:

{ test: { h1: '字符串1 字符串2' }}

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

test:
   h1: '字符串\n字符串' 
   h2: "字符串\n字符串"

转换成 JavaScript 格式如下:

{ test: { h1: '字符串\n字符串', h2: '字符串\n字符串' })

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

test:
   h1: '这是一段
   多行
   字符串'

转为 JavaScript 如下。

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

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

数据使用 - 表示

test:
 - test1
 - test2
 - test3

转为 JavaScript 如下。

{ test: [ 'test1', 'test2', 'test3' ]}

参考文档