العمل مع YAML في Java: مكتبات SnakeYAML وJackson

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع 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() {

توصيات