العمل مع YAML في Java: نظرة عامة على المكتبات وأمثلة الاستخدام
YAML (YAML Ain't Markup Language) هو تنسيق لتسلسل البيانات يُستخدم غالبًا لملفات التكوين نظرًا لسهولة قراءته. في Java، تُستخدم مكتبتان رئيسيتان للعمل مع YAML: SnakeYAML (خفيفة وسريعة) وJackson YAML (قوية مع دعم التعليقات التوضيحية). في هذه المقالة، سنشرح بالتفصيل كلتا المكتبتين، ونعرض أمثلة على القراءة والكتابة وتسلسل الكائنات.
1. مكتبة SnakeYAML
SnakeYAML هي المكتبة الأكثر شيوعًا للعمل مع YAML في Java. تدعم بناء الجملة الكامل لـ YAML 1.1، بما في ذلك العلامات والمراجع والأنواع المخصصة. الإمكانيات الرئيسية:
- قراءة YAML إلى
MapأوListأو كائنات Java مخصصة - كتابة كائنات Java إلى YAML
- دعم الهياكل التكرارية
- استهلاك منخفض للذاكرة
ربط SnakeYAML (Maven)
<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>2.2</version></dependency>قراءة ملف YAML
لنأخذ مثالاً على ملف YAML config.yaml:
server: host: localhost port: 8080database: url: jdbc:mysql://localhost:3306/mydb user: admin password: secretكود Java للقراءة:
import org.yaml.snakeyaml.Yaml;import java.io.InputStream;import java.util.Map;
public class SnakeYamlReader { public static void main(String[] args) { Yaml yaml = new Yaml(); try (InputStream in = SnakeYamlReader.class .getClassLoader() .getResourceAsStream("config.yaml")) { Map<String, Object> data = yaml.load(in); System.out.println("Server host: " + ((Map<String, Object>) data.get("server")).get("host")); } catch (Exception e) { e.printStackTrace(); } }}الكتابة إلى YAML
import org.yaml.snakeyaml.Yaml;import java.util.Map;import java.util.LinkedHashMap;
public class SnakeYamlWriter { public static void main(String[] args) { Map<String, Object> data = new LinkedHashMap<>(); Map<String, Object> server = new LinkedHashMap<>(); server.put("host", "127.0.0.1"); server.put("port", 9090); data.put("server", server);
Yaml yaml = new Yaml(); String output = yaml.dump(data); System.out.println(output); }}2. مكتبة Jackson YAML
Jackson YAML هي وحدة تابعة لـ Jackson تضيف دعم تنسيق YAML. المزايا الرئيسية:
- تكامل كامل مع تعليقات Jackson التوضيحية (
@JsonProperty,@JsonIgnore) - العمل مع كائنات POJO دون الحاجة إلى Map إضافية
- أداء عالٍ بفضل المعالجة التدفقية
- دعم YAML 1.1 وجزئيًا 1.2
ربط Jackson YAML (Maven)
<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> <version>2.16.1</version></dependency>تسلسل POJO إلى YAML
لننشئ فئة للتكوين:
import com.fasterxml.jackson.annotation.JsonProperty;
public class AppConfig { @JsonProperty("server") private ServerConfig server; @JsonProperty("database") private DatabaseConfig database; // الدوال الجالبة والضابطة public ServerConfig getServer() { return server; } public void setServer(ServerConfig server) { this.server = server; } public DatabaseConfig getDatabase() {