JSON, YAML and TOML
33.1 JSON
For strict typed mapping at scale, use Jackson (ObjectMapper) with Groovy classes.
import groovy.json.*
def slurper = new JsonSlurper()
def data = slurper.parseText('{"name": "Ana", "skills": ["Groovy", "Java"], "address": {"city": "Pune"}}')
println data.name, data.skills[0], data.address.city, data.missing?.field
def fromFile = slurper.parse(new File("data.json"))
def fromUrl = slurper.parse(new URL("https://api.github.com/repos/apache/groovy"))
def lax = new JsonSlurper(type: JsonParserType.LAX).parseText("{name: 'unquoted keys'}")
println JsonOutput.toJson([id: 1, tags: ["a", "b"], active: true])
println JsonOutput.prettyPrint(JsonOutput.toJson(data))
class User { String name; int age }
println JsonOutput.toJson(new User(name: "Bo", age: 25))
def u = new User(slurper.parseText('{"name":"Cy","age":40}')) // map → object
def generator = new JsonGenerator.Options()
.excludeNulls()
.dateFormat('yyyy-MM-dd')
.excludeFieldsByName('password')
.addConverter(java.time.LocalDate) { it.toString() }
.build()
println generator.toJson([name: "Ana", password: "x", born: java.time.LocalDate.of(1995, 1, 1), nick: null])33.2 YAML and TOML (Groovy 3+/4+)
import groovy.yaml.*
def yaml = new YamlSlurper().parseText('''
server:
port: 8080
hosts: [a, b]
''')
println yaml.server.port
def yb = new YamlBuilder()
yb { name 'app'; version 1 }
println yb.toString()
import groovy.toml.*
def toml = new TomlSlurper().parseText('title = "Config"\n[db]\nport = 5432')
println toml.db.port