typesafe配置中的示例要求您知道一个字面指定的路径,例如:
config1.getString("complex-app.something")
我需要能够在地方解析带有自由格式标签的配置文件。我该怎么办呢。
说我有像HOCON一样:
root : {
a : { x: 1, y: 2 },
b : { x: 2, z: 3 }
}
在不知道文件中有哪些键的情况下,我怎么能发现有钥匙' a'和' b'以及带有键的对象的值' a'有钥匙' x'并且' y'并为' b'有钥匙' x'和' z'?
以下是一种不这样做的方法:
Config config = ConfigFactory.load("configula");
Config root = config.getObject("root").toConfig();
for (Entry<String, ConfigValue> e: root.entrySet()) {
// The key is a.x, a.y etc. ??!?
// The value is not a map-like thing
}
如果条目集的键是路径,我必须解析路径以找到键的内容,这非常接近于使用StringTokenizer等简单地解析文本文件。
解析嵌套对象的配置方式是什么?例如,使用groovy和ConfigSlurper类似的结构:
root {
a {
x = 1
y = 2
}
b {
x = 2
z = 3
}
}
将被解析为:
cfg = new ConfigSlurper().parse(new File('configula.config'))
cfg.root.each { k, r ->
r.each { kk, v ->
println "${k}, ${kk} -> ${v}"
}
}
我尝试过的所有事物的组合最终都是值为ConfigValue。有没有办法获得映射到对象的键树,这些对象本身包含映射到对象的键?
答案 0 :(得分:1)
要回答我自己的问题:ConfigObject
扩展java.util.Map
因此,当密钥可以是任意值时导航的方法是使用ConfigObject.keySet()
。