Andrey a donné un résumé complet de tous les quatre bibliothèques. Voici mon expérience personnelle avec deux d'entre eux.
À mon travail, nous utilisons les deux JYaml et SnakeYAML. Nous avons commencé avec JYaml dans le calendrier 2007-2008, lorsqu'il est apparu à être actif. Il a API similitudes avec XStream, ce qui est un avantage pour nous. J'ai introduit SnakeYAML à la mi-2009, lorsque j'ai rencontré un bug dans JYaml et remarqué il n'y a eu aucune nouvelle JYaml versions depuis 2007-08-19.
Mise à jour 2011-07-6: récemment, en octobre 2010, JYaml est officiellement plus maintenu à jour et des liens vers ce Q&A pour les autres options.
SnakeYAML a été très solide pour nous. Il est un fidèle port de PyYAML, qui lui-même est considéré comme assez bon pour être une référence de mise en œuvre de YAML 1.1.
Étant un port de PyYAML, vous obtiendrez très bonne interopérabilité entre Java et Python si c'est important pour vous aussi longtemps que vous êtes, ne pas essayer de sérialiser les types natifs (- delà de l'essentiel: les Chaînes de caractères, des nombres, des listes, des cartes).
L'être comme vrai pour le YAML 1.1 spécification comme il est, SnakeYAML peut être utilisé comme un YAML validateur. Certains de la seule difficulté que j'ai eu avec SnakeYAML a été l'obtenir pour charger les DONNÉES générées à partir de Perl via YAML::Syck. Dans presque tous les cas YAML::Syck a généré de l'invalide YAML.
Un inconvénient de SnakeYAML est que c'est principalement destinée à être une bibliothèque Java ↔ YAML de liaison. En l'utilisant comme un objectif général de YAML chargeur devrait être plus simple. Une API de bas niveau est disponible, mais vous perdez de typage implicite et natif de construction de l'objet, sauf si vous ajoutez-les de nouveau. Si vous n'avez pas de contrôle sur les DONNÉES de production, puis votre code porte le fardeau de dire SnakeYAML comment gérer méconnus étiquettes (voir ma demande d'amélioration pour en savoir plus sur cette).
Les responsables de l'exemple fourni par le code sur la façon de prolonger SnakeYAML pour s'adapter à mon cas d'utilisation. C'est une mesure de la qualité de la conception qu'il était possible et une mesure de leur réactivité qu'ils ont fourni à la direction.