Java में YAML के साथ काम करना: SnakeYAML और Jackson लाइब्रेरी
YAML (YAML Ain't Markup Language) एक मानव-पठनीय डेटा सीरियलाइज़ेशन फ़ॉर्मेट है, जिसका उपयोग अक्सर कॉन्फ़िगरेशन फ़ाइलों, API विवरण और डेटा एक्सचेंज के लिए किया जाता है। Java इकोसिस्टम में YAML के साथ काम करने के लिए कई लाइब्रेरी हैं, लेकिन सबसे लोकप्रिय हैं SnakeYAML (लो-लेवल पार्सर) और Jackson YAML (हाई-लेवल समाधान जो एनोटेशन सपोर्ट करता है)। इस लेख में हम दोनों लाइब्रेरी, उनकी क्षमताओं और उपयोग के उदाहरणों को विस्तार से देखेंगे।
1. SnakeYAML — क्लासिक YAML पार्सर
SnakeYAML एक सरल और हल्की लाइब्रेरी है जो पार्सिंग प्रक्रिया पर पूर्ण नियंत्रण प्रदान करती है। यह YAML 1.1 के सभी स्पेसिफिकेशन को सपोर्ट करती है और सरल संरचनाओं (Map, List) के साथ-साथ कस्टम ऑब्जेक्ट के साथ भी काम कर सकती है।
SnakeYAML इंस्टॉल करना
अगर आप Maven का उपयोग कर रहे हैं, तो pom.xml में यह डिपेंडेंसी जोड़ें:
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>2.2</version>
</dependency>
Gradle के लिए:
implementation 'org.yaml:snakeyaml:2.2'
उदाहरण: YAML स्ट्रिंग को Map में पार्स करना
import org.yaml.snakeyaml.Yaml;
import java.util.Map;
public class SnakeYamlExample {
public static void main(String[] args) {
String yamlString = """
server:
host: localhost
port: 8080
database:
url: jdbc:mysql://localhost:3306/mydb
user: admin
password: secret
""";
Yaml yaml = new Yaml();
Map<String, Object> data = yaml.load(yamlString);
System.out.println(data);
// आउटपुट: {server={host=localhost, port=8080}, database={url=jdbc:mysql://localhost:3306/mydb, user=admin, password=secret}}
}
}
उदाहरण: फ़ाइल से YAML लोड करना
import org.yaml.snakeyaml.Yaml;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Map;
public class SnakeYamlFileExample {
public static void main(String[] args) {
try (InputStream input = new FileInputStream("config.yaml")) {
Yaml yaml = new Yaml();
Map<String, Object> data = yaml.load(input);
System.out.println("Port: " + ((Map<String, Object>) data.get("server")).get("port"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
उदाहरण: Java ऑब्जेक्ट को YAML में सीरियलाइज़ करना
import org.yaml.snakeyaml.Yaml;
import java.util.Map;
public class SnakeYamlDumpExample {
public static void main(String[] args) {
Map<String, Object> data = Map.of(
"name", "PythonLib",
"version", 2.0,
"features", List.of("YAML", "JSON", "XML")
);
Yaml yaml = new Yaml();
String output = yaml.dump(data);
System.out.println(output);
// आउटपुट:
// features:
// - YAML
// - JSON
// - XML
// name: PythonLib
// version: 2.0
}
}
SnakeYAML के फायदे:
- बिना अतिरिक्त डिपेंडेंसी के सरल API
- कंस्ट्रक्टर के माध्यम से कस्टम टाइप सपोर्ट
- पार्सिंग की लचीली सेटिंग (जैसे, अज्ञात फ़ील्ड को इग्नोर करना)
2. Jackson YAML — एनोटेशन के साथ आधुनिक समाधान
Jackson YAML, लोकप्रिय Jackson लाइब्रेरी का एक मॉड्यूल है, जो YAML के साथ उसी तरह काम करने की सुविधा देता है जैसे JSON के साथ। यह एनोटेशन (@JsonProperty, @JsonIgnore), POJO के साथ ऑटोमैटिक बाइंडिंग और स्ट्रीमिंग प्रोसेसिंग को सपोर्ट करता है।
Jackson YAML इंस्टॉल करना
Maven:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.15.2</version>
</dependency>
Gradle:
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.15.2'
उदाहरण: POJO को YAML में पार्स और सीरियलाइज़ करना
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import java.io.File;
public class JacksonYamlExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
// YAML फ़ाइल को POJO में पार्स करें
Config config = mapper.readValue(new File("config.yaml"), Config.class);
System.out.println("Server port: " + config.getServer().getPort());
// POJO को YAML में सीरियलाइज़ करें
mapper.writeValue(new File("output.yaml"), config);
}
}
class Config {
private Server server;
private Database database;
// getters और setters
}
class Server {
private String host;
private int port;
// getters और setters
}
class Database {
private String url;
private String user;
private String password;
// getters और setters
}
Jackson YAML के फायदे:
- Jackson इकोसिस्टम के साथ पूर्ण एकीकरण
- एनोटेशन-आधारित कॉन्फ़िगरेशन
- बड़ी फ़ाइलों के लिए स्ट्रीमिंग पार्सिंग
- YAML और JSON के बीच आसान रूपांतरण
निष्कर्ष
SnakeYAML और Jackson YAML दोनों ही Java में YAML के साथ काम करने के लिए शक्तिशाली लाइब्रेरी हैं। SnakeYAML सरल और हल्के प्रोजेक्ट के लिए बेहतर है, जबकि Jackson YAML बड़े और जटिल एप्लिकेशन के लिए उपयुक्त है जहाँ JSON और YAML दोनों के साथ काम करना हो। अपनी ज़रूरत के अनुसार सही लाइब्रेरी चुनें और YAML प्रोसेसिंग को आसान बनाएं!