Kotlin में YAML के साथ काम करना: लाइब्रेरीज़ और उदाहरण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Kotlin में YAML के साथ काम करना: लाइब्रेरीज़ और उपयोग के उदाहरण

YAML (YAML Ain't Markup Language) डेटा सीरियलाइज़ेशन का एक सुविधाजनक फ़ॉर्मेट है, जिसका उपयोग अक्सर कॉन्फ़िगरेशन फ़ाइलों, API स्पेसिफिकेशन (OpenAPI) और डेटा एक्सचेंज के लिए किया जाता है। Kotlin इकोसिस्टम में YAML के साथ काम करने के लिए कई परिपक्व लाइब्रेरीज़ मौजूद हैं, जिनमें से प्रत्येक की अपनी विशेषताएँ हैं। इस लेख में हम तीन मुख्य दृष्टिकोणों पर विचार करेंगे: SnakeYAML, kaml और kotlinx.serialization का YAML फ़ॉर्मेट के साथ उपयोग।

1. SnakeYAML — JVM के लिए क्लासिक पार्सर

SnakeYAML YAML के साथ काम करने के लिए सबसे लोकप्रिय Java लाइब्रेरी है, जो Kotlin के साथ पूरी तरह से संगत है। यह YAML दस्तावेज़ों को पार्स करने और बनाने के लिए लो-लेवल API प्रदान करता है।

कनेक्शन (डिपेंडेंसी जोड़ना)

build.gradle.kts में डिपेंडेंसी जोड़ें:

implementation("org.yaml:snakeyaml:2.2")

उदाहरण: YAML पढ़ना

config.yaml फ़ाइल पर विचार करें:

server:
  host: localhost
  port: 8080
database:
  url: jdbc:postgresql://localhost/mydb
  user: admin
  password: secret

पार्सिंग के लिए कोड:

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

fun main() {
    val yaml = Yaml()
    val inputStream = File("config.yaml").inputStream()
    val data: Map<String, Any> = yaml.load(inputStream)

    val server = data["server"] as Map<String, Any>
    println("होस्ट: ${server["host"]}")
    println("पोर्ट: ${server["port"]}")

    val db = data["database"] as Map<String, Any>
    println("DB URL: ${db["url"]}")
}

उदाहरण: YAML बनाना

fun createYaml() {
    val data = mapOf(
        "appName" to "MyApp",
        "version" to "1.0.0",
        "features" to listOf("auth", "logging", "metrics")
    )

    val yaml = Yaml()
    val writer = FileWriter("output.yaml")
    yaml.dump(data, writer)
    writer.close()
}

SnakeYAML के फायदे:

  • Java प्रोजेक्ट्स के साथ अधिकतम संगतता
  • YAML 1.1 की सभी सुविधाओं का समर्थन (एंकर, टैग, कस्टम टाइप)
  • DumperOptions के माध्यम से लचीला कॉन्फ़िगरेशन

नुकसान:

  • रॉ टाइप Map<String, Any> के साथ काम करता है — टाइप कास्टिंग आवश्यक है
  • Kotlin के data-क्लासेज़ को "आउट ऑफ़ द बॉक्स" सपोर्ट नहीं करता

2. kaml — Kotlin के लिए data-क्लास सपोर्ट वाली लाइब्रेरी

kaml SnakeYAML के ऊपर एक रैपर है, जो Kotlin के data-क्लासेज़ में डिसीरियलाइज़ेशन और उनसे सीरियलाइज़ेशन का समर्थन जोड़ता है। यह लाइब्रेरी ऑटोमैटिक मैपिंग के लिए Kotlin रिफ्लेक्शन का उपयोग करती है।

कनेक्शन (डिपेंडेंसी जोड़ना)

implementation("net.mamoe.yamlkt:yamlkt:0.13.0")

उदाहरण: data-क्लास में डिसीरियलाइज़ेशन

import net.mamoe.yamlkt.Yaml
import net.mamoe.yamlkt.YamlElement

data class ServerConfig(
    val host: String,
    val port: Int
)

data class AppConfig(
    val server: ServerConfig,
    val debug: Boolean = false
)

fun main() {
    val yaml = Yaml()
    val input = """
        server:
          host: "0.0.0.0"
          port: 8080
        debug: true
    """.trimIndent()

    val config = yaml.decodeFromString(AppConfig.serializer(), input)
    println("सर्वर: ${config.server.host}:${config.server.port}")
    println("डीबग मोड: ${config.debug}")
}

उदाहरण: सीरियलाइज़ेशन

fun serializeConfig() {
    val config = AppConfig(
        server = ServerConfig("localhost", 9090),
        debug = false
    )

    val yaml = Yaml()
    val output = yaml.encodeToString(AppConfig.serializer(), config)
    println(output)
}

kaml के फायदे:

  • टाइप-सेफ्टी — Kotlin के data-क्लासेज़ के साथ काम करता है
  • डिफ़ॉल्ट वैल्यू का समर्थन (debug: false)
  • सरल API जो kotlinx.serialization का उपयोग करता है

नुकसान:

  • SnakeYAML की तुलना में थोड़ा धीमा (रिफ्लेक्शन के कारण)
  • YAML 1.2 की कुछ उन्नत सुविधाओं का समर्थन नहीं करता

अनुशंसाएँ