1

假设我有这样的配置:

root {
  value1: 1
  value2: 2

  values {
     dynamic1 {
        static1: 10
        static2: "test"
     }
     dynamic2 {
        static1: 10
        static2: "test"
     }
  }
}

root.values当它们具有动态名称时,是否有可能以及如何获取元素的子元素的集合(也许是地图?) ?

我找到了Config.getConfigList方法,但它没有提供“子配置”的名称。

4

2 回答 2

2

尝试这个:

// Map[String,String]
val values = node.root().keySet.asScala map (id => 
  id -> node.getString(id)
) toMap

说明:您无法查询值的映射(不知道为什么),但您可以通过调用从 ConfigObject 获取键列表node.root().keySet.asScala。然后,您可以使用这些键来使用任何现有方法,例如getString,getConfig等。

于 2015-12-08T22:04:06.437 回答
1

有很多混淆是因为每个 Config 都有一个根(整个对象的根),但是你的层次结构的顶部也称为根,我们说的是两个不同的根。这是 scala shell 摘录,它说明了正在发生的事情:

  • cfig是类型Config
  • cfig.root()是 ConfigObject 类型,您可以在其中迭代子项,并且您可以在其中调用entrySetkeySet. 在您的情况下,唯一的孩子是cfig.root()is root,这是您的层次结构的顶部
  • cfig.getObject("root")属于 ConfigObject 类型,但其子级是层次结构顶部以下一级的子级 - value1, value2,values

    scala> cfig
    

res75: com.typesafe.config.Config = Config(SimpleConfigObject({"root":{"value1":1,"value2":2,"values":{"dynamic1":{"static1":10,"static2 ":"test"},"dynamic2":{"static1":10,"static2":"test"}}}}))

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)
于 2015-12-08T23:08:55.070 回答