我们说我的配置如下:
root {
value1: 1
value2: 2
values {
dynamic1 {
static1: 10
static2: "test"
}
dynamic2 {
static1: 10
static2: "test"
}
}
}
当root.values
元素的子元素具有动态名称时,它是否可能以及如何获取(可能是地图?)?
我找到方法 Config.getConfigList ,但它没有提供' subconfigs'的名称。
答案 0 :(得分:2)
试试这个:
// Map[String,String]
val values = node.root().keySet.asScala map (id =>
id -> node.getString(id)
) toMap
说明:您无法查询值的映射(不确定原因),但可以通过调用node.root().keySet.asScala
从ConfigObject获取键列表。然后,您可以使用这些键来使用任何现有方法,例如getString
,getConfig
等。
答案 1 :(得分:1)
由于每个Config都有一个根(整个对象的根),因此存在很多混淆,但是你的层次结构的顶部也称为root,我们讨论的是两个不同的根。这是scala shell的摘录,它说明了发生了什么:
cfig
的类型为Config
cfig.root()
的类型为ConfigObject,您可以在其中迭代子项,您可以在其中调用entrySet
和keySet
。在您的情况下,cfig.root()
唯一的孩子是root
,这是您的层次结构的顶部 cfig.getObject("root")
属于ConfigObject类型,但其子级是层次结构顶部以下一级的子级 - value1
,value2
,values
scala> cfig
res75:com.typesafe.config.Config = Config(SimpleConfigObject({" root":{" value1":1," value2":2, "值" {" dynamic1" {" static1":10," static2":"测试"}, " dynamic2" {" static1":10," static2":"测试"}}}}))
scala> cfig.root()
res74: com.typesafe.config.ConfigObject = SimpleConfigObject({"root":{"value1":1,"value2":2,"values":{"dynamic1":{"static1":10,"static2":"test"},"dynamic2":{"static1":10,"static2":"test"}}}})
scala> val c2 = cfig.getObject("root")
c2: com.typesafe.config.ConfigObject = SimpleConfigObject({"value1":1,"value2":2,"values":{"dynamic1":{"static1":10,"static2":"test"},"dynamic2":{"static1":10,"static2":"test"}}})
scala> c2.entrySet.size
res72: Int = 3
scala> c2.keySet.toSet
res73: scala.collection.immutable.Set[String] = Set(value2, value1, values)