Since Groovy 4 we can parse TOML configuration data into a Map
. Once the TOML data is transformed into the Map
we can use all possibilities in Groovy to lookup keys and their values in maps. For example we can use GPath expressions to easily get the value of a (nested) key. To parse TOML configuration data we must use the TomlSlurper
class that is in the groovy.toml
package. We can use the parse
method when we have a file, reader or stream with our configuration. To parse a String
value with TOML configuration we use the parseText
method.
In the following example we define our configuration using TOML syntax and use the parseText
method to transform it into a Map
. We use different ways with GPath expressions to read the configuration data:
import groovy.toml.TomlSlurper // Configuration in TOML syntax. def config = ''' application.name = "Groovy TOML" application.version = "1.0.0" application.ports = [80, 443] # Set to true for debugging debug.enabled = false [build] jdk = 'openjdk version "17.0.3" 2022-04-19' time = "2022-06-29T07:32:00Z" [[servers]] name = "dev" host = "localhost" port = 8080 [[servers]] name = "uat" host = "cloud-acc" port = 80 ''' // We get back a Map with all configuration. def toml = new TomlSlurper().parseText(config) // To read data from files, readers or streams we can use overloaded // versions of the method TomlSlurper#parse. // We can reference the properties using GPath expressions. assert toml.application.name == "Groovy TOML" assert toml.application.version == "1.0.0" // TOML array is transformed to ArrayList. assert toml.application.ports == [80, 443] assert toml.application.ports.class == java.util.ArrayList assert toml.application == [name: "Groovy TOML", version: "1.0.0", ports: [80, 443]] // TOML boolean is transformed to boolean. assert !toml.debug.enabled assert toml.build.jdk == /openjdk version "17.0.3" 2022-04-19/ assert toml.build.time == "2022-06-29T07:32:00Z" // Dates are not parsed, but we get them as String value. assert toml.build.time.class == java.lang.String // Array of tables in TOML are also supported by the TomlSlurper. assert toml.servers.size() == 2 def developmentConfig = toml.servers.find { s -> s.name == "dev" } assert developmentConfig.host == "localhost" assert developmentConfig.port == 8080 def uatConfig = toml.servers.find { s -> s.name == "uat" } assert uatConfig.host == "cloud-acc" assert uatConfig.port == 80 assert toml.servers*.name == ["dev", "uat"]
Written with Groovy 4.0.3.