类型安全配置:获取地图

Typesafe config: get as map

googlesheets{
 dmkb_sheet = "1xEC8CPlKn654321wcoS_JB12345cPPiaA0M"
 other_sheet = "123isS0M30TH3R1D"
}

我想使用 myConfig.getAsMap("googlesheets") 之类的东西并将两个嵌套条目作为 Map。不存在这样的方法。那么将两个嵌套条目加载为 Map 的最简单方法是什么?

好的,这很简单。

myConfig.getConfig("googlesheets").entrySet() 成功了

(我一直关注有 "get" 前缀的方法,所以错过了)

对于简单的一些定义,你可以使用这样的东西:

val config = conf.atKey("googlesheets")
config.root.keySet.asScala.map(key ⇒ key → config.getString(key)).toMap

我认为使用库将配置映射到案例 类 会更容易,例如 pureconfig

谢谢。我通过 re-writing 你的回答让它工作如下:

config.entrySet().asScala.map(e => e.getKey -> e.getValue.render()).toMap

我在用 scala Map[String, String] @Senthil 的答案最接近我的答案,但是引用了 Map 值,即它们用双引号括起来,这导致了一个不容易发现的严重错误.我能够解决它的方法是 configValue.unwrapped().toString() 而不是 configValue.render()

在此之前我尝试了 render() 各种 ConfigRenderOptions 但我没有得到想要的结果

config
    .getConfig("<key>")
    .entrySet()
    .asScala
    .map(e => e.getKey -> e.getValue.unwrapped().toString)
    .toMap

我在 scala 中使用它,因此将它转换为 scala 类型

唉,typesafe config 本来就是一个很酷的库,却不得不将 config as Map 做得太难了!