处理 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 是一种强大的表达式语言,受到多种 slurpers(针对不同数据格式)的支持(例如,XmlSlurper
用于 XML)。
有关更多详细信息,请查看有关 GPath 表达式 的部分。 |
下表概述了 YAML 类型和相应的 Groovy 数据类型
YAML | Groovy |
---|---|
string |
|
number |
|
object |
|
array |
|
true |
|
false |
|
null |
|
date |
基于 |
只要 YAML 中的值为 null ,YamlSlurper 就会用 Groovy 的 null 值对其进行补充。这与其他 YAML 解析器形成对比,其他解析器用库提供的单例对象表示 null 值。 |
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"
'''