如何从使用java的typesafe配置中检索嵌套值?

时间:2016-09-15 03:03:17

标签: typesafe-config

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。有没有办法获得映射到对象的键树,这些对象本身包含映射到对象的键?

1 个答案:

答案 0 :(得分:1)

要回答我自己的问题:ConfigObject扩展java.util.Map因此,当密钥可以是任意值时导航的方法是使用ConfigObject.keySet()