处理 YAML
Groovy 有一个可选的 groovy-yaml
模块,它支持在 Groovy 对象和 YAML 之间进行转换。专用于 YAML 序列化和解析的类位于 groovy.yaml
包中。
1. YamlSlurper
YamlSlurper
是一个将 YAML 文本或读取器内容解析为 Groovy 数据结构(对象)的类,例如映射、列表以及 Integer
、Double
、Boolean
和 String
等基本类型。
该类带有一系列重载的 parse
方法以及一些特殊方法,例如 parseText
等。在下一个示例中,我们将使用 parseText
方法。它解析一个 YAML String
并将其递归转换为对象列表或映射。其他 parse*
方法类似,它们都返回一个 YAML String
,但适用于不同的参数类型。
def ys = new YamlSlurper()
def yaml = ys.parseText '''
language: groovy
sudo: required
dist: trusty
matrix:
include:
- jdk: openjdk10
- jdk: oraclejdk9
- jdk: oraclejdk8
before_script:
- |
unset _JAVA_OPTIONS
'''
assert 'groovy' == yaml.language
assert 'required' == yaml.sudo
assert 'trusty' == yaml.dist
assert ['openjdk10', 'oraclejdk9', 'oraclejdk8'] == yaml.matrix.include.jdk
assert ['unset _JAVA_OPTIONS'] == yaml.before_script*.trim()
请注意,结果是一个普通映射,可以像普通的 Groovy 对象实例一样处理。YamlSlurper
根据 YAML Ain’t Markup Language (YAML™) 的定义解析给定的 YAML。
由于 YamlSlurper
返回纯 Groovy 对象实例,而没有任何特殊的 YAML 类作为后端,因此其用法是透明的。事实上,YamlSlurper
的结果符合 GPath 表达式。GPath 是一种强大的表达式语言,受多种不同数据格式的 slurper 支持(XmlSlurper
用于 XML 就是一个例子)。
有关更多详细信息,请参阅有关 GPath 表达式的部分。 |
下表概述了 YAML 类型和相应的 Groovy 数据类型
YAML | Groovy |
---|---|
字符串 |
|
数字 |
|
对象 |
|
数组 |
|
真 |
|
假 |
|
空 |
|
日期 |
基于 |
当 YAML 中的值为 null 时,YamlSlurper 会将其补充为 Groovy 的 null 值。这与将 null 值表示为库提供的单例对象的其他 YAML 解析器不同。 |
1.1. 构建器
从 Groovy 创建 YAML 的另一种方法是使用 YamlBuilder
。该构建器提供了一个 DSL,允许构建一个对象图,然后将其转换为 YAML。
def builder = new YamlBuilder()
builder.records {
car {
name 'HSV Maloo'
make 'Holden'
year 2006
country 'Australia'
homepage new URL('http://example.org')
record {
type 'speed'
description 'production pickup truck with speed of 271kph'
}
}
}
assert builder.toString() == '''---
records:
car:
name: "HSV Maloo"
make: "Holden"
year: 2006
country: "Australia"
homepage: "http://example.org"
record:
type: "speed"
description: "production pickup truck with speed of 271kph"
'''