我的YAML文件看起来像这样。
values:
key1:
subkey1:
type: abc
value: someValue
subkey3:
type: xyz
value: someOtherValue
key2:
subkey2:
type: def
value: yetAnotherValue
我可以使用snakeyaml将其解析为地图结构(Map<String,Key>
)。在上面的示例中,地图的键为key1
和key2
。
这是我要实现的代码:
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
有两个字段:type
和value
。