当前位置: 首页 > 知识库问答 >
问题:

使用snakeYaml解析根处有映射的YAML文档

史绍晖
2023-03-14
19:
  typeID: 2
  limit: 300
20:
  typeID: 8
  limit: 100
Map<Integer, Item>
class Item {
    private Integer typeId;
    private Integer limit;
}

文档中只有嵌套在其他对象中的映射/集合的示例,因此您可以执行以下操作:

    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);

但是,当地图格式位于文档的根目录时,如何定义它呢?

共有1个答案

公冶才
2023-03-14

下面是我对一个非常相似的情况所做的。我只是将整个yml文件放在一个选项卡上,并在顶部添加了一个map:tag。所以对于你的案子来说是这样。

map:
  19:
    typeID: 2
    limit: 300
  20:
    typeID: 8
    limit: 100

然后在您的类中创建一个静态类来读取这个文件,如下所示。

static class Items {
    public Map<Integer, Item> map;
}

然后阅读你的地图只需使用。

Yaml yaml = new Yaml(new Constructor(Items));
Items items = (Items) yaml.load(<file>);
Map<Integer, Item> itemMap = items.map;
try (BufferedReader br = new BufferedReader(new FileReader(new File("example.yml")))) {
    StringBuilder builder = new StringBuilder("map:\n");
    String line;
    while ((line = br.readLine()) != null) {
        builder.append("    ").append(line).append("\n");
    }

    Yaml yaml = new Yaml(new Constructor(Items));
    Items items = (Items) yaml.load(builder.toString());
    Map<Integer, Item> itemMap = items.map;
}
 类似资料:
  • 问题内容: 我想将YAML文档读取到自定义对象的映射(而不是map,默认情况下snakeYaml会这样做)。所以这: 将被加载到如下所示的地图中: 其中项目是: 我找不到使用snakeYaml做到这一点的方法,也找不到适合该任务的更好的库。 该文档仅包含将地图/集合嵌套在其他对象中的示例,因此您可以执行以下操作: 但是,当地图格式位于文档的根目录时,该如何定义呢? 问题答案: 您需要添加一个自定义

  • 我试图将上面的文件加载到一个映射中,实体部分下的数据将映射到实体对象的集合。当我得到yaml解析器错误时,这是正确的yaml语法吗。

  • 是否有任何方法可以使用java编辑/删除YAMLfile中的值。 我正在使用struts2-jquery-grid,其中数据将从YAML文件中填充。现在,如果我编辑字段,它应该保存在YAML文件中。我能够分别使用yaml.load()和yaml.dump()从YAML格式的文件中读取值并将值写入文件。但是,我没有任何想法来编辑和删除特定的字段。 我经历过http://code.google.com

  • 考虑以下代码: 我唯一发现的是: dump(Object data)方法接受Java对象并生成YAML文档 和 是只有我一个人,还是文档感觉非常神秘和指定?其中一半是关于我甚至从未听说过的特殊应用。我只看着它就觉得自己很傻,这让我有点生气。 不管怎样;如果你能给我任何帮助,我将不胜感激。

  • YAML中的流映射表示键值对的无序集合。 它们也称为映射节点。 请注意,键应保持唯一。 如果流映射结构中存在重复的键,则会生成错误。 键顺序在序列化树中生成。 示例 流映射结构的示例如下所示 - JSON格式的映射序列(无序列表)的输出如下所示 - 如果如上所示观察此输出,则会发现在YAML映射结构中键名称是唯一的。

  • 我在这方面遇到了很多麻烦。我定义了构造函数,我可以让它导入一个文档,但不是两个。我得到的错误是: 有了一个include,Snakeyaml很高兴找到一个EOF并处理导入。有了两个,就不开心了(上图)。 我的java源代码是: 问题是,有没有人对蛇蟹做过类似的事情?有没有想过我做错了什么?