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