Kotlin:
Työskentely YAML:n kanssa

Kuinka:

Kotlin ei tue sisäänrakennettuna YAML:n jäsennystä ja serialisointia, mutta voit hyödyntää suosittuja kolmannen osapuolen kirjastoja, kuten snakeyaml (yleiseen YAML-jäsennykseen) ja kotlinx.serialization (YAML-muoto laajennuksena) työskennelläksesi YAML-tiedostojen kanssa.

Käyttämällä snakeyaml

Riippuvuus:

implementation 'org.yaml:snakeyaml:1.30'

Lue 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)
}

// Esimerkkitapaus
fun main() {
    readYaml("config.yaml")
}

Esimerkki config.yaml:

database:
  host: localhost
  port: 5432

Esimerkkituloste:

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

Käyttämällä kotlinx.serialization YAML:n kanssa

Varmista ensin, että sinulla on kotlinx-serialization-kirjasto sopivalla YAML-tukikirjastolla (jos saatavilla, koska kotlinx.serialization suuntautuu ensisijaisesti JSON:iin ja muihin suoraan tuettuihin formaatteihin).

Riippuvuus:

// JSON:lle (havainnollistava, tarkista YAML-tuki tai vaihtoehtoiset kirjastot)
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2'

Määrittele serialisoituva data-luokka:

import kotlinx.serialization.Serializable

@Serializable
data class Config(
    val database: Database
)

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

Valitettavasti kirjoitushetkellä suora YAML-tuki kotlinx.serialization-kirjastossa saattaa olla rajallinen tai kehittyvä. Saatat joutua käyttämään välimuotoa (kuten muuntaa YAML JSON:ksi snakeyaml-kirjastolla ja sitten jäsentää JSON kotlinx.serialization-kirjastolla) tai etsiä yhteisön vetämiä YAML-serialisointiprojekteja, jotka ovat yhteensopivia kotlinx.serialization-kirjaston kanssa.

JSONille koodi näyttäisi tältä:

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)
}

Koska Kotlin ja sen ekosysteemi jatkavat kehittymistään, pidä silmällä virallista dokumentaatiota ja yhteisöresursseja saadaksesi viimeisimmät tiedot YAML-tuesta ja kirjastoista.