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.