Ich möchte ein YAML-Dokument zu einer Karte von benutzerdefinierten Objekten (anstelle von Karten, die snakeYaml standardmäßig tut) lesen. So folgt aus:Parsing eines YAML-Dokuments mit einer Karte im Stamm mithilfe von snakeYaml
19:
typeID: 2
limit: 300
20:
typeID: 8
limit: 100
Würde auf eine Karte geladen werden, die wie folgt aussieht:
Map<Integer, Item>
wo Artikel sind:
class Item {
private Integer typeId;
private Integer limit;
}
ich keine Möglichkeit, dies zu tun mit SnakeYAML finden konnte, und ich konnte auch keine bessere Bibliothek für diese Aufgabe finden.
Die Dokumentation nur Beispiele mit Karten/Sammlungen verschachtelt innerhalb anderer Objekte hat, so dass Sie Folgendes tun können:
TypeDescription typeDescription = new TypeDescription(ClassContainingAMap.class);
typeDescription.putMapPropertyType("propertyNameOfNestedMap", Integer.class, Item.class);
Constructor constructor = new Constructor(typeDescription);
Yaml yaml = new Yaml(constructor);
/* creating an input stream (is) */
ClassContainingAMap obj = (ClassContainingAMap) yaml.load(is);
Aber wie gehe ich über das Kartenformat definieren, wenn es an der Wurzel ist das Dokument?
Wow, ist YAML-Unterstützung in Java Apalling. Während diese Lösung funktioniert, wäre es ein Kopfzerbrechen, wenn man sich mit verschachtelten Strukturen befassen müsste. Ich denke, ich werde einfach alles in JSON konvertieren und Jackson zum Parsen verwenden. – Justas
Ja. Yaml Parsing in Java (/ scala) * ist * schrecklich. Kommt von Python, wo es "frei" ist. – javadba