Kotlin में YAML के साथ कार्य: लाइब्रेरीज़, पार्सिंग और सीरियलाइज़ेशन
YAML (YAML Ain't Markup Language) — डेटा सीरियलाइज़ेशन का एक लोकप्रिय प्रारूप है, जिसका व्यापक रूप से कॉन्फ़िगरेशन फ़ाइलों, निर्भरताओं के विवरण और डेटा आदान-प्रदान के लिए उपयोग किया जाता है। अपनी पठनीयता और संक्षिप्तता के कारण, YAML को अक्सर JSON या XML पर प्राथमिकता दी जाती है। Kotlin इकोसिस्टम में YAML के साथ कार्य करने के लिए कई परिपक्व लाइब्रेरीज़ मौजूद हैं। इस लेख में हम तीन मुख्य दृष्टिकोणों पर विचार करेंगे: SnakeYAML, Kaml और Jackson YAML।
1. SnakeYAML — क्लासिक विकल्प
SnakeYAML — YAML को पार्स करने के लिए सबसे लोकप्रिय Java लाइब्रेरी है, जो Kotlin में भी बढ़िया काम करती है। यह एक निम्न-स्तरीय API प्रदान करती है, जो YAML को Map, List या मनमानी ऑब्जेक्ट के रूप में पढ़ने की अनुमति देती है।
कनेक्शन (Gradle)
dependencies { implementation("org.yaml:snakeyaml:2.2")}उदाहरण: सरल YAML पढ़ना
import org.yaml.snakeyaml.Yaml
fun main() { val yamlString = """ server: host: "localhost" port: 8080 ssl: false database: url: "jdbc:postgresql://localhost/mydb" user: "admin" password: "secret" """.trimIndent()
val yaml = Yaml() val data: Map<String, Any> = yaml.load(yamlString) println(data) // आउटपुट: {server={host=localhost, port=8080, ssl=false}, database={url=jdbc:postgresql://localhost/mydb, user=admin, password=secret}}}उदाहरण: data class में मैपिंग
import org.yaml.snakeyaml.Yamlimport org.yaml.snakeyaml.constructor.Constructor
data class ServerConfig( val host: String, val port: Int, val ssl: Boolean)
data class DatabaseConfig( val url: String, val user: String, val password: String)
data class AppConfig( val server: ServerConfig, val database: DatabaseConfig)
fun main() { val yamlString = """ server: host: "localhost" port: 8080 ssl: false database: url: "jdbc:postgresql://localhost/mydb" user: "admin" password: "secret" """.trimIndent()
val yaml = Yaml(Constructor(AppConfig::class.java)) val config: AppConfig = yaml.load(yamlString) println(config.server.host) // localhost println(config.database.port) // त्रुटि! DatabaseConfig में port नहीं है}महत्वपूर्ण: SnakeYAML Java रिफ्लेक्शन का उपयोग करता है, इसलिए data class में बिना पैरामीटर वाला कंस्ट्रक्टर होना चाहिए या क्लास निर्दिष्ट करने के लिए Constructor का उपयोग करना चाहिए। नेस्टेड संरचनाओं के लिए मैन्युअल कॉन्फ़िगरेशन की आवश्यकता हो सकती है।
2. Kaml — नेटिव Kotlin लाइब्रेरी
Kaml (Kotlin YAML library) — kotlinx.serialization का उपयोग करके Kotlin में लिखी गई एक आधुनिक लाइब्रेरी है। यह टाइप-सुरक्षा, sealed class, nullable-फ़ील्ड और कस्टम सीरियलाइज़र के लिए समर्थन प्रदान करती है।
कनेक्शन (Gradle)
dependencies { implementation("net.mamoe.yamlkt:yamlkt:0.13.0") // या implementation("com.charleskorn.kaml:kaml:0.56.0")}हम charleskorn के Kaml पर विचार करेंगे, क्योंकि यह अधिक लोकप्रिय है और सक्रिय रूप से विकसित हो रहा है।
उदाहरण: सीरियलाइज़ेशन और डीसीरियलाइज़ेशन
import kotlinx.serialization.Serializableimport kotlinx.serialization.encodeToStringimport kotlinx.serialization.decodeFromStringimport com.charleskorn.kaml.Yaml
@Serializabledata class ServerConfig( val host: String = "localhost", val port: Int = 8080, val ssl: Boolean = false)
@Serializabledata class AppConfig( val server: ServerConfig, val name: String)
fun main() { val config = AppConfig( server = ServerConfig(host = "example.com", port = 443, ssl = true), name = "MyApp" )
// YAML में सीरियलाइज़ेशन val yamlO