如何在 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())
我想动态生成 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())