Kotlin:
Lavorare con YAML

Come fare:

Kotlin non ha un supporto integrato per l’analisi e la serializzazione di YAML, ma è possibile utilizzare popolari librerie di terze parti come snakeyaml (per l’analisi generale di YAML) e kotlinx.serialization (con un’estensione di formato YAML) per lavorare con file YAML.

Utilizzando snakeyaml

Dipendenza:

implementation 'org.yaml:snakeyaml:1.30'

Leggere YAML:

import org.yaml.snakeyaml.Yaml
import java.io.FileInputStream

fun readYaml(filePath: String) {
    val yaml = Yaml()
    val inputStream = FileInputStream(filePath)
    val data = yaml.load<Map<String, Any>>(inputStream)

    println(data)
}

// Utilizzo di esempio
fun main() {
    readYaml("config.yaml")
}

Esempio config.yaml:

database:
  host: localhost
  port: 5432

Output di esempio:

{database={host=localhost, port=5432}}

Utilizzando kotlinx.serialization con YAML

Per prima cosa, assicurati di avere la libreria kotlinx-serialization con una libreria di supporto YAML adatta (se disponibile, dato che kotlinx.serialization mira principalmente a JSON e altri formati direttamente).

Dipendenza:

// Per JSON (illustrativo, verifica il supporto YAML o le librerie alternative)
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2'

Definire una classe di dati serializzabile:

import kotlinx.serialization.Serializable

@Serializable
data class Config(
    val database: Database
)

@Serializable
data class Database(
    val host: String,
    val port: Int
)

Sfortunatamente, al momento della scrittura, il supporto diretto a YAML in kotlinx.serialization potrebbe essere limitato o in evoluzione. Potrebbe essere necessario utilizzare una rappresentazione intermedia (come convertire YAML in JSON con snakeyaml e poi analizzare JSON con kotlinx.serialization) o cercare progetti di serializzazione YAML guidati dalla comunità compatibili con kotlinx.serialization.

Per JSON, il codice sarebbe qualcosa di simile a questo:

import kotlinx.serialization.json.Json
import kotlinx.serialization.decodeFromString

fun main() {
    val jsonText = """
    {
        "database": {
            "host": "localhost",
            "port": 5432
        }
    }
    """.trimIndent()
    
    val config = Json.decodeFromString<Config>(jsonText)
    println(config)
}

Poiché Kotlin e il suo ecosistema continuano a evolversi, tieni d’occhio la documentazione ufficiale e le risorse della comunità per le ultime novità riguardo il supporto e le librerie YAML.