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

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

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

ابدأ الدورة

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

\n\n

YAML (YAML Ain't Markup Language) هو تنسيق تسلسل بيانات قابل للقراءة البشرية، يُستخدم غالبًا لملفات الإعدادات ووصف API وتبادل البيانات. في نظام Java البيئي، توجد عدة مكتبات للعمل مع YAML، لكن أشهرها هي SnakeYAML (محلل منخفض المستوى) وJackson YAML (حل عالي المستوى مع دعم التعليقات التوضيحية). في هذه المقالة، سنستعرض بالتفصيل كلتا المكتبتين وإمكانياتهما وأمثلة الاستخدام.

\n\n

1. SnakeYAML — المحلل الكلاسيكي لـ YAML

\n\n

SnakeYAML هي مكتبة بسيطة وخفيفة الوزن توفر تحكمًا كاملاً في عملية التحليل. وهي تدعم جميع مواصفات YAML 1.1 وتسمح بالعمل مع الهياكل البسيطة (Map, List) والكائنات المخصصة.

\n\n

تثبيت SnakeYAML

\n\n

إذا كنت تستخدم Maven، أضف التبعية في pom.xml:

\n\n
<dependency>\n    <groupId>org.yaml</groupId>\n    <artifactId>snakeyaml</artifactId>\n    <version>2.2</version>\n</dependency>
\n\n

لـ Gradle:

\n\n
implementation 'org.yaml:snakeyaml:2.2'
\n\n

مثال: تحليل سلسلة YAML إلى Map

\n\n
import org.yaml.snakeyaml.Yaml;\nimport java.util.Map;\n\npublic class SnakeYamlExample {\n    public static void main(String[] args) {\n        String yamlString = """\n            server:\n              host: localhost\n              port: 8080\n            database:\n              url: jdbc:mysql://localhost:3306/mydb\n              user: admin\n              password: secret\n            """;\n\n        Yaml yaml = new Yaml();\n        Map<String, Object> data = yaml.load(yamlString);\n\n        System.out.println(data);\n        // الإخراج: {server={host=localhost, port=8080}, database={url=jdbc:mysql://localhost:3306/mydb, user=admin, password=secret}}\n    }\n}
\n\n

مثال: تحميل YAML من ملف

\n\n
import org.yaml.snakeyaml.Yaml;\nimport java.io.FileInputStream;\nimport java.io.InputStream;\nimport java.util.Map;\n\npublic class SnakeYamlFileExample {\n    public static void main(String[] args) {\n        try (InputStream input = new FileInputStream("config.yaml")) {\n            Yaml yaml = new Yaml();\n            Map<String, Object> data = yaml.load(input);\n            System.out.println("المنفذ: " + ((Map<String, Object>) data.get("server")).get("port"));\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n}
\n\n

مثال: تسلسل كائن Java إلى YAML

\n\n
import org.yaml.snakeyaml.Yaml;\nimport java.util.Map;\n\npublic class SnakeYamlDumpExample {\n    public static void main(String[] args) {\n        Map<String, Object> data = Map.of(\n            "name", "PythonLib",\n            "version", 2.0,\n            "features", List.of("YAML", "JSON", "XML")\n        );\n\n        Yaml yaml = new Yaml();\n        String output = yaml.dump(data);\n        System.out.println(output);\n        // الإخراج:\n        // features:\n        // - YAML\n        // - JSON\n        // - XML\n        // name: PythonLib\n        // version: 2.0\n    }\n}
\n\n

مزايا SnakeYAML:

\n
    \n
  • API بسيط بدون تبعيات إضافية
  • \n
  • دعم الأنواع المخصصة عبر المنشئات (Constructors)
  • \n
  • إعدادات تحليل مرنة (مثل تجاهل الحقول غير المعروفة)
  • \n
\n\n

2. Jackson YAML — حل حديث مع التعليقات التوضيحية

\n\n

Jackson YAML هو وحدة للمكتبة الشهيرة Jackson، تتيح العمل مع YAML بنفس طريقة العمل مع JSON. وهو يدعم التعليقات التوضيحية (@JsonProperty, @JsonIgnore)، والربط التلقائي مع POJO، والمعالجة التدفقية.

\n\n

تثبيت Jackson YAML

\n\n

Maven:

\n\n

                
    
    

توصيات