In Groovy we have useful classes to parse JSON and XML: JsonSlurper and XmlSlurper . Groovy 3 adds the YamlSlurper class to read in YAML formatted strings. The result of parsing the YAML content is a Map object.

In the next example we have a sample YAML as string that we parse using the parseText method of YamlSlurper :

import groovy.yaml.YamlSlurper def configYaml = '''\ --- application: "Sample App" users: - name: "mrhaki" likes: - Groovy - Clojure - Java - name: "Hubert" likes: - Apples - Bananas connections: - "WS1" - "WS2" ''' // Parse the YAML. def config = new YamlSlurper().parseText(configYaml) assert config.application == 'Sample App' assert config.users.size() == 2 assert config.users[0] == [name: 'mrhaki', likes: ['Groovy', 'Clojure', 'Java']] assert config.users[1] == [name: 'Hubert', likes: ['Apples', 'Bananas']] assert config.connections == ['WS1', 'WS2']

We can also use Reader with the parse method of YamlSlurlper :

// Create YAML file. def yamlFile = new File("sample.yml") // with YAML contents. yamlFile.write('''\ --- sample: true Groovy: "Rocks!" ''') // Using File.withReader, // so reader is closed by Groovy automatically. yamlFile.withReader { reader -> // Use parse method of YamlSlurper. def yaml = new YamlSlurper().parse(reader) assert yaml.sample assert yaml.Groovy == 'Rocks!' }

Finally we need to do an extra step if we want to read in a multiple YAML documents defined in one string or file. The underlying parser of YamlSlurper only reads in one document. A simple workaround is to remove the document separator ( --- ) before parsing the YAML:

def multiDocYaml = '''\ --- version: 1 --- loadAtStartup: true ''' // For YAML with multiple documents separated by --- // we first need to remove the separators, otherwise // only the first document is parsed. def multiDoc = new YamlSlurper().parseText(multiDocYaml.replaceAll('---', '')) assert multiDoc.version == 1 assert multiDoc.loadAtStartup

Written with Groovy 3.0.0.