我想将YAML文档读取到自定义对象的映射(而不是map,默认情况下snakeYaml会这样做)。所以这:
19:
typeID: 2
limit: 300
20:
typeID: 8
limit: 100
将被加载到如下所示的地图中:
Map<Integer, Item>
其中项目是:
class Item {
private Integer typeId;
private Integer limit;
}
我找不到使用snakeYaml做到这一点的方法,也找不到适合该任务的更好的库。
该文档仅包含将地图/集合嵌套在其他对象中的示例,因此您可以执行以下操作:
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);
但是,当地图格式位于文档的根目录时,该如何定义呢?
您需要添加一个自定义的Constructor。但是,您不想注册“
item”或“ item-list”标签。
实际上,您想对Yaml 应用Duck
Typing
。它不是超级高效,但是有一个相对简单的方法可以做到这一点。
class YamlConstructor extends Constructor {
@Override
protected Object constructObject(Node node) {
if (node.getTag() == Tag.MAP) {
LinkedHashMap<String, Object> map = (LinkedHashMap<String, Object>) super
.constructObject(node);
// If the map has the typeId and limit attributes
// return a new Item object using the values from the map
...
}
// In all other cases, use the default constructObject.
return super.constructObject(node);
文档中只有嵌套在其他对象中的映射/集合的示例,因此您可以执行以下操作: 但是,当地图格式位于文档的根目录时,如何定义它呢?
我试图将上面的文件加载到一个映射中,实体部分下的数据将映射到实体对象的集合。当我得到yaml解析器错误时,这是正确的yaml语法吗。
是否有任何方法可以使用java编辑/删除YAMLfile中的值。 我正在使用struts2-jquery-grid,其中数据将从YAML文件中填充。现在,如果我编辑字段,它应该保存在YAML文件中。我能够分别使用yaml.load()和yaml.dump()从YAML格式的文件中读取值并将值写入文件。但是,我没有任何想法来编辑和删除特定的字段。 我经历过http://code.google.com
考虑以下代码: 我唯一发现的是: dump(Object data)方法接受Java对象并生成YAML文档 和 是只有我一个人,还是文档感觉非常神秘和指定?其中一半是关于我甚至从未听说过的特殊应用。我只看着它就觉得自己很傻,这让我有点生气。 不管怎样;如果你能给我任何帮助,我将不胜感激。
当我将Bean字段切换到public时,所有工作都很好,但我真的想使用getter和setter(最好是由Lombok生成的)。
我在这方面遇到了很多麻烦。我定义了构造函数,我可以让它导入一个文档,但不是两个。我得到的错误是: 有了一个include,Snakeyaml很高兴找到一个EOF并处理导入。有了两个,就不开心了(上图)。 我的java源代码是: 问题是,有没有人对蛇蟹做过类似的事情?有没有想过我做错了什么?