How do I parse a YAML file in groovy?

59,480

Solution 1

UPDATE Dec-2021: The documentation of the SnakeYAML project is not accessible anymore on Bitbucket, and a quick google search did not show any alternate repository, so I guess this project either has gone closed source or it has died.

So I am adding here the same example, but implemented with the native YAMLSlurper (Groovy 3.x+):

    import groovy.yaml.YamlSlurper
    
    def exampleYaml = '''\
    ---
    - subject: "maths"
    - subject: "chemistry"
    '''
    
    List example = new YamlSlurper().parseText(exampleYaml)
//If your source is a File
//    List example = new YamlSlurper().parse("example.yaml" as File)
    
    example.each{println it.subject}

For previous versions (Original answer):

snakeyaml is a library to parse YAML files. Easy to use in groovy.

UPDATE: changed type of the example variable to List, as the example file's top level element is a collection

    @Grab('org.yaml:snakeyaml:1.17')
    
    import org.yaml.snakeyaml.Yaml
    
    Yaml parser = new Yaml()
    List example = parser.load(("example.yaml" as File).text)
    
    example.each{println it.subject}

Full documentation of snakeyaml:

https://bitbucket.org/asomov/snakeyaml/wiki/Documentation

Solution 2

FWIW, the upcoming (as time of this writing) Groovy version 3.0 has direct support for yaml: http://docs.groovy-lang.org/next/html/api/groovy/yaml/package-summary.html with the traditional YamlSlurper / YamlBuilder combo You could always switch to this not-yet-officially-released version.

[Edited] that version 3.0.x is now officially available, with the groovy.yaml package http://docs.groovy-lang.org/latest/html/api/groovy/yaml/package-summary.html

Share:
59,480
user3412172
Author by

user3412172

Updated on December 26, 2021

Comments

  • user3412172
    user3412172 over 2 years

    say if you have a file called example.yaml which contains the following: - subject: maths.

    How do i grab the string after - subject?

    I already can read the contents of the file but want to know how to grab a specific string from it.

    note: i know regex may help but have never used it and would appreciate any help.