Kotlin:
Робота з YAML

Як:

Kotlin не має вбудованої підтримки для аналізу та серіалізації YAML, але ви можете використовувати популярні сторонні бібліотеки, такі як snakeyaml (для загального аналізу YAML) та kotlinx.serialization (з розширенням формату YAML), для роботи з файлами YAML.

Використання snakeyaml

Залежність:

implementation 'org.yaml:snakeyaml:1.30'

Читання 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)
}

// Зразок використання
fun main() {
    readYaml("config.yaml")
}

Зразок config.yaml:

database:
  host: localhost
  port: 5432

Зразок виводу:

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

Використання kotlinx.serialization з YAML

Спочатку переконайтеся, що ви маєте бібліотеку kotlinx-serialization з підходящою бібліотекою підтримки YAML (якщо доступна, оскільки kotlinx.serialization переважно націлена на JSON та інші формати безпосередньо).

Залежність:

// Для JSON (ілюстративно, перевірте підтримку YAML або альтернативні бібліотеки)
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2'

Визначення серіалізованого класу даних:

import kotlinx.serialization.Serializable

@Serializable
data class Config(
    val database: Database
)

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

На жаль, на час написання, пряма підтримка YAML у kotlinx.serialization може бути обмеженою або в розвитку. Вам може знадобитися використати проміжне представлення (наприклад, конвертувати YAML у JSON за допомогою snakeyaml, а потім аналізувати JSON за допомогою kotlinx.serialization) або шукати спільнотні проєкти серіалізації YAML, сумісні з kotlinx.serialization.

Для JSON код виглядав би так:

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

Оскільки Kotlin та його екосистема продовжують еволюціонувати, слідкуйте за офіційною документацією та ресурсами спільноти, щоб дізнатися останнє про підтримку YAML та бібліотеки.