العمل مع YAML في Java: مكتبات SnakeYAML وJackson
\n\nYAML (YAML Ain't Markup Language) هو تنسيق تسلسل بيانات قابل للقراءة البشرية، يُستخدم غالبًا لملفات الإعدادات ووصف API وتبادل البيانات. في نظام Java البيئي، توجد عدة مكتبات للعمل مع YAML، لكن أشهرها هي SnakeYAML (محلل منخفض المستوى) وJackson YAML (حل عالي المستوى مع دعم التعليقات التوضيحية). في هذه المقالة، سنستعرض بالتفصيل كلتا المكتبتين وإمكانياتهما وأمثلة الاستخدام.
\n\n1. SnakeYAML — المحلل الكلاسيكي لـ YAML
\n\nSnakeYAML هي مكتبة بسيطة وخفيفة الوزن توفر تحكمًا كاملاً في عملية التحليل. وهي تدعم جميع مواصفات YAML 1.1 وتسمح بالعمل مع الهياكل البسيطة (Map, List) والكائنات المخصصة.
\n\nتثبيت SnakeYAML
\n\nإذا كنت تستخدم Maven، أضف التبعية في pom.xml:
<dependency>\n <groupId>org.yaml</groupId>\n <artifactId>snakeyaml</artifactId>\n <version>2.2</version>\n</dependency>\n\nلـ Gradle:
\n\nimplementation 'org.yaml:snakeyaml:2.2'\n\nمثال: تحليل سلسلة YAML إلى Map
\n\nimport 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\nimport 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\nimport 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
2. Jackson YAML — حل حديث مع التعليقات التوضيحية
\n\nJackson YAML هو وحدة للمكتبة الشهيرة Jackson، تتيح العمل مع YAML بنفس طريقة العمل مع JSON. وهو يدعم التعليقات التوضيحية (@JsonProperty, @JsonIgnore)، والربط التلقائي مع POJO، والمعالجة التدفقية.
تثبيت Jackson YAML
\n\nMaven:
\n\nأيضاً في المكتبة
توصيات