首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hocon动态键

hocon动态键
EN

Stack Overflow用户
提问于 2015-12-08 21:57:26
回答 2查看 889关注 0票数 1

假设我有这样的配置:

代码语言:javascript
复制
root {
  value1: 1
  value2: 2

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

是否有可能以及如何获得收藏(可能是地图?)root.values元素的子元素,当它们有动态名称时?

我已经找到了方法Config.getConfigList,但它没有提供'subconfigs‘的名称。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-08 23:08:55

有很多混乱,因为每个Config都有一个根(整个对象的根),但是你的象形文字的顶部也叫做根,我们讨论的是两个不同的根。以下是scala的摘录,它说明了正在发生的事情:

  • cfigConfig型的
  • cfig.root()的类型是ConfigObject,您可以在其中迭代子程序,并可以在其中调用entrySetkeySet。在您的例子中,cfig.root()的独生子是root,它是您的层次结构的顶部。
  • cfig.getObject("root")是ConfigObject类型的,但它的子级比您的层次结构( value1value2values )低一级。 scala> cfig

Config(SimpleConfigObject({"root":{"value1":1,"value2":2,“值”:{“dynamic1”:{“static1”:10,“static2”:“测试”},"dynamic2":{"static1":10,“static2”:“测试”}})

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2015-12-08 22:04:06

试试这个:

代码语言:javascript
复制
// Map[String,String]
val values = node.root().keySet.asScala map (id => 
  id -> node.getString(id)
) toMap

说明:您不能查询值映射(不确定原因),但是可以通过调用ConfigObject从node.root().keySet.asScala获得键列表。然后您可以使用这些键来使用任何现有的方法,如getStringgetConfig等。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34166808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档