如何使用snakeyaml

时间:2018-10-12 07:33:18

标签: java yaml snakeyaml

我的YAML文件看起来像这样。

values:
  key1:
    subkey1:
      type: abc
      value: someValue
    subkey3:
      type: xyz
      value: someOtherValue

  key2:
    subkey2:
      type: def
      value: yetAnotherValue

我可以使用snakeyaml将其解析为地图结构(Map<String,Key>)。在上面的示例中,地图的键为key1key2

这是我要实现的代码:

public Map<String, Keys> parse(InputStream inputStream) {
  Yaml yaml = new Yaml(new Constructor(Values.class));
  ((Values) yaml.load(inputStream)).getValues();

private static class Values {
  public Map<String, Keys> keys;

  public Map<String, Keys> getKeys() {
    return keys;
  }
}

在我的Keys班上,我有:

public class Keys {

  private SomeClass subkey1;
  private SomeClass subkey2;
  private SomeClass subkey3;

  // getters and setter
  ...
}

这当然是丑陋的,不是很通用。我宁愿想要一张地图:

public class Keys {

  private Map<String, SomeClass> subKeys;

所以不要打电话:

map.get("key1").getSubkey2().getValue();

然后我会打电话

map.get("key1").get("subkey2").getValue();

我不确定我缺少什么,但是我不知道如何告诉snakeyaml映射到这样的结构中。

编辑: 我删除了顶层values,并更改了代码以映射到Map<String, Map<String, Map<String, String>>>的默认结构中。效果很好,但是使用这些对象有点麻烦。

所以也许我的问题可以改写:我的Java类和snakeyaml配置看起来如何映射到这样的结构中:

最高级别: Map<String, Keys>

Keys然后包含另一个映射: Map<String, Element>

最后Element有两个字段:typevalue

0 个答案:

没有答案