Travailler avec YAML en Java : les bibliothèques SnakeYAML et Jackson
\n\nYAML (YAML Ain't Markup Language) est un format de sérialisation de données lisible par l'homme, souvent utilisé pour les fichiers de configuration, la description d'API et l'échange de données. Dans l'écosystème Java, il existe plusieurs bibliothèques pour travailler avec YAML, mais les plus populaires sont SnakeYAML (analyseur de bas niveau) et Jackson YAML (solution de haut niveau avec prise en charge des annotations). Dans cet article, nous examinerons en détail les deux bibliothèques, leurs fonctionnalités et des exemples d'utilisation.
\n\n1. SnakeYAML — l'analyseur YAML classique
\n\nSnakeYAML est une bibliothèque simple et légère qui offre un contrôle total sur le processus d'analyse. Elle prend en charge toutes les spécifications YAML 1.1 et permet de travailler aussi bien avec des structures simples (Map, List) qu'avec des objets personnalisés.
\n\nInstallation de SnakeYAML
\n\nSi vous utilisez Maven, ajoutez la dépendance dans pom.xml :
<dependency>\n <groupId>org.yaml</groupId>\n <artifactId>snakeyaml</artifactId>\n <version>2.2</version>\n</dependency>\n\nPour Gradle :
\n\nimplementation 'org.yaml:snakeyaml:2.2'\n\nExemple : analyse d'une chaîne YAML en 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 // Sortie : {server={host=localhost, port=8080}, database={url=jdbc:mysql://localhost:3306/mydb, user=admin, password=secret}}\n }\n}\n\nExemple : chargement d'un YAML depuis un fichier
\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\nExemple : sérialisation d'un objet Java en 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 // Sortie :\n // features:\n // - YAML\n // - JSON\n // - XML\n // name: PythonLib\n // version: 2.0\n }\n}\n\nAvantages de SnakeYAML :
\n- \n
- API simple sans dépendances superflues \n
- Prise en charge des types personnalisés via des constructeurs \n
- Configuration flexible de l'analyse (par exemple, ignorer les champs inconnus) \n
2. Jackson YAML — une solution moderne avec annotations
\n\nJackson YAML est un module pour la bibliothèque populaire Jackson, qui permet de travailler avec YAML de la même manière qu'avec JSON. Il prend en charge les annotations (@JsonProperty, @JsonIgnore), la liaison automatique avec POJO et le traitement par flux.
Installation de Jackson YAML
\n\nMaven :
\n\nAussi dans la bibliothèque
Configuration des applications Swift : bibliothèque SwiftyConfiguration
Programmation réactive en Java : bibliothèques Project Reactor et RxJava
Sh – exécution de commandes shell en Python
Envoi de SMS en Java : aperçu des bibliothèques API et outils
Travailler avec XML en Rust : bibliothèques quick-xml, roxmltree et serde_xml_rs
Recommendations