Arbeit mit YAML in Java: Bibliotheken SnakeYAML und Jackson
\n\nYAML (YAML Ain't Markup Language) ist ein menschenlesbares Daten-Serialisierungsformat, das häufig für Konfigurationsdateien, API-Beschreibungen und Datenaustausch verwendet wird. Im Java-Ökosystem gibt es mehrere Bibliotheken für die Arbeit mit YAML, aber die bekanntesten sind SnakeYAML (Low-Level-Parser) und Jackson YAML (High-Level-Lösung mit Annotation-Unterstützung). In diesem Artikel werden wir beide Bibliotheken, ihre Funktionen und Anwendungsbeispiele im Detail betrachten.
\n\n1. SnakeYAML – klassischer YAML-Parser
\n\nSnakeYAML ist eine einfache und leichtgewichtige Bibliothek, die volle Kontrolle über den Parsing-Prozess bietet. Sie unterstützt alle YAML 1.1-Spezifikationen und ermöglicht die Arbeit sowohl mit einfachen Strukturen (Map, List) als auch mit benutzerdefinierten Objekten.
\n\nInstallation von SnakeYAML
\n\nWenn Sie Maven verwenden, fügen Sie die Abhängigkeit in pom.xml hinzu:
<dependency>\n <groupId>org.yaml</groupId>\n <artifactId>snakeyaml</artifactId>\n <version>2.2</version>\n</dependency>\n\nFür Gradle:
\n\nimplementation 'org.yaml:snakeyaml:2.2'\n\nBeispiel: YAML-String in Map parsen
\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 // Ausgabe: {server={host=localhost, port=8080}, database={url=jdbc:mysql://localhost:3306/mydb, user=admin, password=secret}}\n }\n}\n\nBeispiel: YAML aus Datei laden
\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("Port: " + ((Map<String, Object>) data.get("server")).get("port"));\n } catch (Exception e) {\n e.printStackTrace();\n }\n }\n}\n\nBeispiel: Java-Objekt in YAML serialisieren
\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 // Ausgabe:\n // features:\n // - YAML\n // - JSON\n // - XML\n // name: PythonLib\n // version: 2.0\n }\n}\n\nVorteile von SnakeYAML:
\n- \n
- Einfache API ohne überflüssige Abhängigkeiten \n
- Unterstützung benutzerdefinierter Typen über Konstruktoren \n
- Flexible Parsing-Konfiguration (z. B. Ignorieren unbekannter Felder) \n
2. Jackson YAML – moderne Lösung mit Annotationen
\n\nJackson YAML ist ein Modul für die beliebte Jackson-Bibliothek, das die Arbeit mit YAML genauso wie mit JSON ermöglicht. Es unterstützt Annotationen (@JsonProperty, @JsonIgnore), automatische Bindung an POJOs und Streaming-Verarbeitung.
Installation von Jackson YAML
\n\nMaven:
\n\nAuch in der Bibliothek
Empfehlungen