Как я могу динамически генерировать типобезопасный файл конфигурации (Hocon) в Scala (создать файл конфигурации)

Я хочу генерировать конфигурацию 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"}))

не в состоянии понять, как извлечь из него конф

Я попробовал ниже вариант, но он печатает в формате JSON

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

Любой другой подход для генерации conf, чтобы можно было поддерживать вложенную структуру?

Редактировать: найденное решение Вложенную конфигурацию можно создать с помощью ConfigFactory.withValue https://marcinkubala.wordpress.com/2013/10/09/typesafe-config-hocon/

2 ответа

Решение

Я не уверен, хорошо ли я понимаю вашу проблему...

Но мне кажется, что вам нужно только отформатировать 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}")

(Я использовал один символ табуляции для отступа, вы можете заменить его на несколько вкладок или с фиксированным количеством пробелов).

Вы можете использовать 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")

Вы можете попробовать следующее:

    myConfig.root().render(com.typesafe.config.ConfigRenderOptions.concise())
Другие вопросы по тегам