如何在 Scala 中动态生成类型安全配置(Hocon)文件(生成配置文件)

How can I generate typesafe config (Hocon) file dynamically in scala (generate config file)

我想动态生成 Hocon 配置。

输入地图和

输出 文件内容如下

block{
key1 : value
key2 : value
}

Trying to read map
     var myMap = new util.HashMap[String,AnyRef]()
     val myConfig = ConfigFactory.parseMap(myMap)

myConfig.toString print below
Config(SimpleConfigObject({"key":"value"}))

无法弄清楚如何从中提取 conf

我尝试了以下选项,但它以 JSON 格式打印

val finalConfig : String =
      myConfig.root().render( ConfigRenderOptions.defaults())
println(finalConfig)

还有其他生成 conf 以支持嵌套结构的方法吗?

编辑:找到解决方案 可以使用 ConfigFactory.withValue 创建嵌套配置 https://marcinkubala.wordpress.com/2013/10/09/typesafe-config-hocon/

您可以使用 kxbmap/configs

这支持开箱即用的 play-json。我用它来将整个配置直接映射到 case classes.

因此您的示例如下所示:

import com.typesafe.config.ConfigFactory
import configs.Configs

val config = ConfigFactory.parseString("""
  block{
    key1 : value
    key2 : value
  }
  """)

config.get[Map[String, String]("block")

我不确定我是否理解你的问题...

但在我看来,您只需要将 Map 格式化为 HOCON-like String.
您可以稍后将其写入文件。

希望这段代码是您要找的:

import collection.JavaConverters._

def toHocon(map: java.util.Map[String, AnyRef]): String =
  map
   .asScala
   .map { case (key, value) => s"$key : $value" }
   .mkString("block{\n\t", "\n\t", "\n}")

(我用了一个tab字符来缩进,你可以用更多的tabs替换它,或者用固定数量的空格).

您可以尝试以下操作:

    myConfig.root().render(com.typesafe.config.ConfigRenderOptions.concise())