如何在Scala中动态生成Typesafe配置(Hocon)文件(生成配置文件)

时间:2019-02-12 19:49:37

标签: scala typesafe hocon

我想动态生成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/

3 个答案:

答案 0 :(得分:1)

您可以使用 kxbmap/configs

这开箱即用地支持FragmentB。我用它直接将整个配置映射到@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment2, container, false); GraphView graphView = rootView.findViewById(R.id.graph); return rootView; }

所以您的示例如下:

FragmentC

答案 1 :(得分:1)

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

但是在我看来,您只需要将Map格式化为类似于 HOCON 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 字符,您可以将其替换为更多的 tab 或固定数量的空格)

答案 2 :(得分:0)

您可以在下面尝试:

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