使用SnakeYAML编写YAML文件

时间:2014-03-08 18:01:25

标签: java map yaml config snakeyaml

我一直在尝试创建一种方法,将我拥有的值组合到Yaml.load可以读取的Map中。所以,例如:

Map<String, Object> map = new HashMap<String, Object>();
map.put("example.key.abc", "test");
map.put("example.key.def", "another test");
map.put("example.test", "yet another test");
map.put("example2.ex", "ex2");

我希望将其变成Yaml可以阅读的地图。我尝试将abc和def放入带有值的地图中,然后将该地图放入带有其他值的地图中。我似乎无法让这个工作。此外,我希望这能够使用任何键,因此手动执行映射将无法正常工作。如果我可以通过其余的代码运行一个可以通过Yaml读取的Map,那么这是我希望从上面的键获得的输出:

example:
  key:
    abc: test
    def: another test
  test: yet another test
example2:
  ex: ex2

我似乎无法制作可以将我拥有的Map组合到Yaml可以理解的Map中的方法。那里有一个API,或者这只是一个非常简单的方法,我只是想不通?感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

您如何看待Guavas Splitter(特别是MapSplitter #withKeyValueSeparator),并结合mapTransformation之类的

Maps.transformEntries(fromMap, transformer)

所以得到的地图,你可以给snakeYaml看起来像

Map<String,Map<String,Map<String, String>>> =
  ImmutableMap.of("example", ImmutableMap.of("key", ImmutableMap.of("abc", "test")... 

btw:你知道来自typesafe-config的HOCON,这个库支持读取和写入点分隔(Map forming)配置文件

foo.bar=10
foo.baz=12

Config foo = conf.getConfig("foo");
int bar2 = foo.getInt("bar");

int bar1 = conf.getInt("foo.bar");