Processing YAML
Groovy has an optional groovy-yaml
module which provides support for converting between Groovy objects and YAML. The classes dedicated to
YAML serialisation and parsing are found in the groovy.yaml
package.
1. YamlSlurper
YamlSlurper
is a class that parses YAML text or reader content into Groovy data structures (objects) such as maps, lists and
primitive types like Integer
, Double
, Boolean
and String
.
The class comes with a bunch of overloaded parse
methods plus some special methods such as parseText
and others. For the next example we will use the parseText
method. It parses a YAML String
and recursively converts it to a
list or map of objects. The other parse*
methods are similar in that they return a YAML String
but for different parameter
types.
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()
Notice the result is a plain map and can be handled like a normal Groovy object instance. YamlSlurper
parses the
given YAML as defined by the YAML Ain’t Markup Language (YAML™).
As YamlSlurper
is returning pure Groovy object instances without any special YAML classes in the back, its usage
is transparent. In fact, YamlSlurper
results conform to GPath expressions. GPath is a powerful expression language
that is supported by multiple slurpers for different data formats (XmlSlurper
for XML being one example).
For more details please have a look at the section on GPath expressions. |
The following table gives an overview of the YAML types and the corresponding Groovy data types:
YAML | Groovy |
---|---|
string |
|
number |
|
object |
|
array |
|
true |
|
false |
|
null |
|
date |
|
Whenever a value in YAML is null , YamlSlurper supplements it with the Groovy null value. This is in contrast to other
YAML parsers that represent a null value with a library-provided singleton object.
|
1.1. Builders
Another way to create YAML from Groovy is to use YamlBuilder
. The builder provide a
DSL which allows to formulate an object graph which is then converted to 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"
'''