2

我想动态生成 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/创建嵌套配置

4

3 回答 3

1

您可以使用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")
于 2019-02-12T20:16:02.533 回答
1

我不确定我是否很好地理解了你的问题......

但在我看来,您只需要将您的格式设置Map为类似HOCONString.
您可以稍后将其写入文件。

希望此代码段是您正在寻找的:

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}")

(我使用了一个制表符作为缩进,你可以用更多的制表符替换它,或者用固定数量的空格替换它)

于 2019-02-12T21:09:29.437 回答
0

你可以试试下面:

    myConfig.root().render(com.typesafe.config.ConfigRenderOptions.concise())
于 2019-11-25T04:27:13.173 回答